使用Indy(Delphi)发送和接收简单的字符串值

时间:2010-07-30 08:59:15

标签: delphi indy

有没有办法在不使用WriteLN和ReadLN的情况下发送简单文本(字符串值)? ReadLn函数需要LF char,当我通过winsock向Indy发送文本消息时,ReadLn无法正确获取消息,并且会不断发生一些异常。

2 个答案:

答案 0 :(得分:2)

如果您不希望使用终止字符(WriteLn / ReadLn以这种方式执行),则先将要发送的字节数写入套接字,然后写出或读取多个字节另一边。您还可以使用与换行符不同的终止字符,您可以正确地从帽子中取出。也许Chr(251),这是一个很好的。

最后,我打赌你回到WriteLn / ReadLn。因为它简单,预期,而且有效。

答案 1 :(得分:1)

您的文字是否有任何终止字符?如果是,那么你可以设置ReadLn的ATerminator参数,这样当它到达你自己定义的终止字符时,它将终止读取而不是LF字符。

如果没有定义的终止字符,但您知道文本的最大长度,则可以设置ReadLn的AMaxLineLength参数。这将导致ReadLn仅接受长度小于AMaxLineLength的文本。

如果没有定义的终止字符,并且您不知道接收文本的最大长度,则可以将ReadStream的AReadUntilDisconnect参数设置为True,而不是使用ReadLn。当然,ReadStream将数据作为字节流读取。您可以为其分配TStringStream,以便您可以将接收的字节作为字符串。 AReadUntilDisconnect参数告诉ReadStream继续读取接收的数据,直到客户端断开连接。因此,如果您设置此参数,则客户端应在文本发送到服务器后立即断开连接。