在我的TIdTCPServer.OnConnect
事件中,我使用以下方式接收信息:
AContext.Connection.IOHandler.ReadLn(LF, 5000)
我已经读到ReadLn()
在字符串的末尾需要LF
,那么我需要在末尾添加LF
吗?
TCPClient.IOHandler.WriteLn('TEXT' + LF);
我在WriteLn()
中看到它已经自动包含了:
procedure TIdIOHandler.WriteLn(const AOut: string;
AByteEncoding: IIdTextEncoding = nil
{$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}
);
begin
// which encodes a LF character to byte $25 instead of $0A (and decodes
// byte $0A to character #$8E instead of #$A). To account for that, don't
// encoding the CRLF using the specified encoding anymore, force the encoding
// to what it should be...
//
// But, what to do if the target encoding is UTF-16?
{
Write(AOut, AByteEncoding{$IFDEF STRING_IS_ANSI, ASrcEncoding{$ENDIF);
Write(EOL, Indy8BitEncoding{$IFDEF STRING_IS_ANSI, Indy8BitEncoding{$ENDIF);
}
// Do as one write so it only makes one call to network
Write(AOut + EOL, AByteEncoding
{$IFDEF STRING_IS_ANSI}, ASrcEncoding{$ENDIF}
);
end;
1条答案
按热度按时间waxmsbnn1#
正如您所注意到的,
IOHandler.WriteLn()
在每个字符串的末尾自动发送EOL
(也称为CRLF
)。这是因为大多数文本Internet协议使用CRLF
。如果省略了终止符,
IOHandler.ReadLn()
默认会处理LF
,但是只要终止符是LF
(隐式或显式),那么IOHandler.ReadLn()
也会处理CRLF
。所以,不要把你自己的LF
传递给IOHandler.WriteLn()
,例如:如果您想发送
LF
而不是CRLF
,请使用IOHandler.Write()
,例如: