У меня есть программа Delphi, которая сидит в качестве сервера, получающего данные, и отправляет обратно небольшие пакеты подтверждения. Ранее я использовал этот код (отредактированный для краткости)Delphi 7 и Indy 9 записи данных от TCPServer
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.
Я застрял. Может ли кто-нибудь предложить какие-либо слова мудрости?
Спасибо Реми, мне нужно было разыменовать строку. Теперь он работает нормально. – Kate