从TCPClient读取问题

我在C#中创建一个简单的客户端应用程序,并且遇到了问题。

服务器应用程序以" "等格式发送字符串。换句话说,第一个符号是整数,其余的是任何东西,每个都被一个空格隔开。

我在读取这个字符串时遇到的问题是我的程序首先读取了一个字符串,然后在下次读到时我得到了剩下的消息。 例如,如果我在收到的内容上写了一条写字符,它将如下所示:(如果他发送“1 0 0 0”)

 1 0 0 0 

(编辑:格式化似乎不允许这样.1在它自己的行上,其余的应该在下面的行上,包括第一个0之前的空格)

我已经没有想法如何解决这个问题。 这是方法(我注释了一些我试过的东西): http : //pastebin.com/0bXC9J2f

编辑(再次):我忘记了,当我在调试时,它似乎工作正常,只是一步一步地完成所有事情,所以我找不到任何问题的来源。

TCP是基于流的而不是基于消息的。 One Read可以包含以下任何替代方案:

  • 消息的一个小小的weeny部分
  • 一半消息
  • 完全是一条消息
  • 一个半消息
  • 两条消息

因此,您需要使用某种方法来查看是否已到达完整的消息。 最常见的方法是:

  • 添加页脚(例如空行),表示消息结束
  • 添加包含消息长度的固定长度标头

如果您的协议是直接TCP,那么您不能发送消息,字符串或除八位字节(字节)流之外的任何其他内容。 你的’字符串’最后是否为空? 如果是这样,您需要附加收到的数据,直到空到达,然后您有您的消息。

如果这是你的问题,那么你应该对协议进行编码,这样无论在套接字上进行多少次读取调用,它都能正常工作,例如。 如果服务器发送[99数据字节+#0]的以空字符结尾的字符串,则如果在一次调用中返回100个字节,在100次调用中接收到1个字节,或者其他任何内容,则您的协议应该能够组合正确的字符串之间。

Rgds,马丁