Перейти к содержанию
  • Регистрация
  • 0
Martifan

TIDTCPClient, TIDTCPServer

Вопрос

Доброго времени сутки

сделал стандартный TCP клиент сервер для мобильного устройства то есть сервер запущен на компьютере а клиент мобильнике и клиент через определенное время отправляет одну команду (каждый 30 секунд), все работает идеально, до тех пор пока не погаснет экран на мобильнике после этого перестает отправлять команды и через 5-7 минут вообще отключается клиент от сервера подскажите пожалуйста что можно сделать чтобы он все равно отправлял команды когда экран отключен и не отключался от сервера?

заранее всем спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

Чтобы приложение оставалось активным в фоновом режиме (я про андроид), приложение должно отображать постоянное уведомление.

Сам такое уведомление еще не реализовывал, поэтому технической реализации не подскажу (пока по крайней мере)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
16 минут назад, Tumaso сказал:

Чтобы приложение оставалось активным в фоновом режиме (я про андроид), приложение должно отображать постоянное уведомление.

Сам такое уведомление еще не реализовывал, поэтому технической реализации не подскажу (пока по крайней мере)

а документацию как это реализовать не знайте где можно прочитать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 часа назад, Martifan сказал:

стандартный TCP клиент сервер для мобильного устройства то есть сервер запущен на компьютере а клиент мобильнике и клиент через определенное время отправляет одну команду (каждый 30 секунд), все работает идеально, до тех пор пока не погаснет экран на мобильнике после этого перестает отправлять команды и через 5-7 минут вообще отключается клиент от сервера подскажите пожалуйста что можно сделать чтобы он все равно отправлял команды когда экран отключен и не отключался от сервера?

Зачем Вам такое поведение приложения? Можно пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
32 минуты назад, #WAMACO сказал:

Зачем Вам такое поведение приложения? Можно пример?

это маленькая приложения который отправляет запросы от клиента серверу о том что клиентский телефон включен и сколько процент батареи, ничего особенного просто удивился такое странное поведения клиента и подумал может кто то столкнулся таким же проблемой

То есть команда:

IOHandler.WriteLn(ObjectToJson(ASentObject), IndyTextEncoding_UTF8);

работал фоновом режиме (когда экран отключен) 

Изменено пользователем Martifan

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
7 часов назад, Martifan сказал:

это маленькая приложения который отправляет запросы от клиента серверу о том что клиентский телефон включен и сколько процент батареи, ничего особенного просто удивился такое странное поведения клиента и подумал может кто то столкнулся таким же проблемой

То есть команда:


IOHandler.WriteLn(ObjectToJson(ASentObject), IndyTextEncoding_UTF8);

работал фоновом режиме (когда экран отключен) 

У @Rusland есть решение с фореграунд-сервисом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
10 минут назад, mazayhin сказал:

У @Rusland есть решение с фореграунд-сервисом

можете дать премию ссылку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 часов назад, Martifan сказал:

можете дать премию ссылку?

В ЛС можно спросить, может он довел до ума и выложит сюда.

То что я делал выкладывать в общий доступ - стыдно, а приводить в нормальный вид - некогда.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Рагим
      Добрый день. Решил сегодня сделать некоторые доработки в приложение написанное на XE7 под Андроид и столкнулся со следующей проблемой: приложение не получает информацию через связку TIdTCPClient/TIdTCPServer. До этого все работало.
      Отправляю сообщение с компьютера через TIdTCPClient:
      try     form2.IdTCPClient1.Connect;     form2.IdTCPClient1.IOHandler.WriteLn(ss,enUTF8);     form2.IdTCPClient1.Disconnect;    except      showmessage('Error');      end;     end;//try получаю (вернее не получаю) на телефоне под Андроид:
      procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); begin  l := AContext.Connection.IOHandler.ReadLn(enUTF8);  showmessage(l); end;  
      В чем может быть проблема и как решить?
    • От Камышев Александр
      tcp_client->Socket->Write( data_out, false ); data_out - TMemoryStream размером около 1,5 Мб, если использовать wifi все ок, в OnWork исправно AWorkCount по 96 байт шлет.
      Выключаю wifi проверяю интернет соединение - все ок, небольшие массивы по несколько килобайт уходят без проблем.
      Впихиваю 1,5 метра - AWorkCount показывает какие-то либо терабайты либо отрицательные значения.
      Ошибки нет, тупо висит. Что ему не так то? help
    • От serg557
      Вопрос заключается в следующем - есть сервер сделанный в VCL
      Server1->DefaultPort=6590 void __fastcall TForm3::Server1Execute(TIdContext *AContext) // на запрос от клиента { TIdIOHandler *a = AContext->Connection->IOHandler; UnicodeString res = a->ReadLn(IndyUTF8Encoding(true)); if (res == "zapros") { if (ListBox1->Items->Strings[0]!="") { a->WriteLn(ListBox1->Items->Strings[0],IndyUTF8Encoding(true)); a->WriteLn(ListBox3->Items->Strings[0],IndyUTF8Encoding(true)); ListBox2->Items->Add("("+AContext->Connection->Socket->Binding->IP+")"+ListBox1->Items->Strings[0]); } есть клиент написанный на vcl
      //порт указан вручную Client1->Host =Edit2->Text; if (Client1->Connected()==false) { try { Client1->Connect(); } catch(...) { ShowMessage("Не удалось подключиться"); } } TIdIOHandler *a = Client1->IOHandler; a->WriteLn("zapros",enUTF8); Edit1->Text=a->ReadLn(enUTF8); Edit5->Text=a->ReadLn(enUTF8); a->Free(); } рабочий, захотел переложить его на FMX:
      Client1->Port=6590; Client1->Host=Edit1->Text; if (Client1->Connected()==false) { try { Client1->Connect(); } catch(...) { Client1->Socket->Close(); ShowMessage("Не удалось подключиться"); } } TIdIOHandler *a = Client1->IOHandler; a->WriteLn("zapros",IndyUTF8Encoding(true)); Edit3->Text=a->ReadLn(IndyUTF8Encoding(true)); Edit5->Text=a->ReadLn(IndyUTF8Encoding(true)); Client1->Socket->Close(); a->Free(); } выдает ошибку 
       Может подскажет кто-как их помирить? (Сервер переписывать не вариант  )
    • От loony-pants
      Впервые взялся за разработку Клиент-серверного приложения.  Нашёл пример с IdTCPServer и IdTCPClient, попытался начать с реализации  запроса-ответа. При нажатии на кнопку клиент зависает (Как я понял - соединение не происходит). Ip адрес указывал просмотрев с сайта 2ip.ru и тот, что в "сведениях о сетевом подключении" - результат один и тот же - Зависает клиент. Пробовал с IdUDPClient и IdUDPServer - работает, НО только во внутренней сети, а мне необходим глобальный обмен.
       
      Клиент:
      procedure TForm2.LoginButtonClick(Sender: TObject); begin try IdTCPClient1.Host :='127.0.0.1'; /// Менял IP адрес   IdTCPClient1.Port:=55560; IdTCPClient1.Connect; except Memo2.Lines.Add('Не удается соединиться с указанным сервером'); Exit; end; Memo2.Lines.Append(IdTCPClient1.Socket.ReadLn); IdTCPClient1.Disconnect; end; Сервер:
      procedure TForm1.FormCreate(Sender: TObject); begin section1 := TCriticalSection.Create; idTcpServer1.DefaultPort:=55560; idTcpServer1.Active:=true; end; procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var strText: String; begin strText := AContext.Connection.Socket.ReadLn; AContext.Connection.Socket.WriteLn('Login: ' + strText); section1.Enter; Edit3.Text := AContext.Connection.Socket.Binding.PeerIP; section1.Leave; Memo1.Lines.Add(AContext.Connection.Socket.Binding.PeerIP); AContext.Connection.Disconnect; end;
    • От M1shQa
      Добрый день госопда. Есть одно приложение на плюсах под андроид, получаю данные через сокеты по tcp посредством компоненты от Indy (только tcp сокеты, других вариантов начальство не дает). Проблема состоит в том, что каждый раз, когда идет получение на пример картинки, то вcё зависает и висит во фризе до конца получения данных, весь телефон висит! Можно как то решить эту проблему? Особенно это ужасает когда приложение работает в фоне и пытается выкачать картинку, телефон просто зависает и все, ничего не поделаешь..
    • От MIB
      Столкнулся с засадой: нужно передать с клиента (андроид) на сервер (Win) данные
      TArray_Data = record fText_a: String;   a,b:double; ... end; Ранее всегда использовал стандартные ServerSocket / ClientSocket и соответственно ReceiveBuf / SendBuf, а вот в Инди такое не проходит.
      Подскажите, плз, вариант решения? 
       
    • От ivadimos
      Собственно в IdTCPClient возникает Max line length exceeded при чтении.
      Шаманы в интернетах советуют поменять величину константы IdMaxLineLengthDefault.
      Есть ли другие способы решения?
    • От Martifan
      Доброго времени суток.  Подскажите пожалуйста, как отправить TIdBytes с сервера на клиент используя Indy10 tcpClient/Server и как получить отправленный TIdBytes на стороне клиента. (Рассматривается вариант и по UDP). Заранее спасибо.
    • От Martifan
      Доброго времени суток.  Подскажите пожалуйста, как отправить файл с сервера на клиент используя Indy10 tcpClient/Server и как получить отправленный файл на стороне клиента. (Рассматривается вариант и по UDP). Заранее спасибо.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...