从TCPClient读取问题

Tho*_*mas 1 .net c# sockets

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

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

我在读取这个字符串时得到的问题是我的程序首先读取了一个字符串,然后在下次读取时我得到了剩下的消息.例如,如果我要对收到的东西做一个写作线,它将如下所示:(如果他发送"1 0 0 0")

1
 0 0 0 
Run Code Online (Sandbox Code Playgroud)

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

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

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

jga*_*fin 8

TCP是基于流的,而不是基于消息的.一个Read可以包含以下任何替代方案:

  • 消息的一个小小的weeny部分
  • 半信息
  • 一条消息
  • 一个半消息
  • 两条消息

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

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