Я работаю над программой на Delphi, которая должна соответствовать стандартному протоколу ADC . Этот протокол указывает, что каждая строка заканчивается символом новой строки (# 10 # 13 ИЛИ sLineBreak). Проблема в том, что символ новой строки, похоже, не переживает поездки с сервера в программу. Чтение данных из сокета, кажется, просто дает все это одной большой строкой. Я думал, что это как-то связано с тем, как программа отображала отладочные сообщения (объекту TMemo), но Pos (sLineBreak, Buf) всегда возвращает 0 (то есть не может найти строку).
Мой код:
procedure OnRead(Sender: TObject; Socket: TCustomWinSocket);
begin
//read all the data from the socket
while Socket.ReceiveLength > 0 do
Buf := Buf + Socket.ReceiveText;
//use only complete lines
while Pos(sLineBreak, Buf) > 0 do begin
//parsing stuff
end;
end;
Кроме того, серверу не нужно отправлять команды на разных этапах, он может отправлять их все сразу с символами новой строки в них, следовательно, необходимо прочитать весь сокет, а затем пройти его, а не принимать один команда на чтение сокета.