Я создаю приложение клиент-сервер для непрерывной потоковой передачи изображений, чтобы работать как приложение потокового видео.
Клиентское приложение имеет таймер, который каждые 300 мс тикает, чтобы отправить запрос на сервер, и сервер отвечает с изображением.
Реализация работает нормально, но через некоторое время (~ через 5 минут или более) оба приложения зависают без каких-либо сообщений об ошибках (но очень редко я получаю сообщение из системного ресурса)
Раньше это было еще хуже (зависает через ~ 15 секунд), но я изменил idtcpserver1.terminatewaittime to 10 (from 5000 defalt)
теперь это происходит через 5 минут.
Я не могу понять, почему происходит ошибка, но я совершенно уверен, что нецелесообразно использовать запрос на основе таймера.
Могу ли я преобразовать tcpserver в ненадежный протокол без установления соединения, чтобы сделать его быстрее и уменьшить нагрузку на запрос.
Но я не хочу использовать UDP, так как он не может обнаружить ошибку повреждения (но мне не нужно исправление, я только хочу знать, есть ли ошибка (чтобы игнорировать все изображение))
procedure server.IdTCPServer1Execute(AContext: TIdContext);
begin
LLine := AContext.Connection.IOHandler.ReadLn();
AContext.Connection.IOHandler.Write(ast, 0, true);
end;
procedure client.timertick(Sender: TObject);
begin
IdTCPClient1.IOHandler.WriteLn(Edit1.Text);
LLine := TMemoryStream.Create;
IdTCPClient1.IOHandler.ReadStream(LLine, -1, false);
end;
предоставлен только исходный код, относящийся к Indy, другие удержаны
=============== обновлено После Реми Лебо - Ответы TeamB и Арно Буше ==========
Спасибо замерзание из-за недоступного изображения в определенных ситуациях.
Упомянутые ими инструменты помогли мне отследить проблему
Но все же главная проблема не решена
Могу ли я преобразовать tcpserver в ненадежный протокол без установления соединения, чтобы сделать его быстрее и уменьшить нагрузку на запрос.