У меня есть программа Delphi, которая работает как сервер, получающий данные и отправляющий обратно небольшие пакеты подтверждения. Я ранее использовал этот код (отредактированный для краткости)
procedure TdmServer.OnExecuteTCPServer(AThread: TIdPeerThread);
var
IncomingPacket : string;
ResponsePacket : string;
begin
IncomingPacket := AThread.Connection.Readln(#$03);
if IncomingPacket <> '' then
begin
ResponsePacket := ProcessTelegram(IncomingPacket);
AThread.Connection.writeln(ResponsePacket);
end;
AThread.Connection.Disconnect;
end;
Это почти работает нормально, за исключением добавления конца строки CRLF при отправке, что не нравится клиенту (не под моим контролем).
Поэтому я изменил его на:
AThread.Connection.Write(ResponsePacket);
и ничего не получено на клиенте.
Затем я попытался
AThread.Connection.WriteBuffer(ResponsePacket, length(ResponsePacket), true);
чтобы попытаться заставить его писать немедленно, но он все еще не отправляет вообще.
Я вставил задержки, попытался открыть буфер, сбросить его и снова закрыть (как файл справки), но все равно без радости, и каждый раз, когда вызывается FlushWriteBuffer, я получаю AV.
Я застрял. Пожалуйста, может ли кто-нибудь предложить какие-либо слова мудрости?