나는 델파이에서 ADC standard protocol을 준수해야하는 프로그램을 만들고 있습니다. 이 프로토콜은 각 줄을 줄 바꿈 문자 (# 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;
또한, 서버는 따라서 그들에 줄 바꿈으로 한 번에 모두를 보낼 수 있습니다, 다른 단계로 명령을 보낼 전체 소켓을 읽을 필요가 없습니다 소켓 읽기마다 하나의 명령을 가정하는 것과는 대조적입니다.
소켓 읽기 당 하나의 명령을 절대로 가정해서는 안됩니다. TCP 패킷은 무작위 덩어리로 도착합니다. – mjn