如何在不关闭套接字连接的情况下使用C#中的TCP套接字发送多个消息?

Joe*_*Joe 0 c# sockets

我需要使用C#在TCP ockock连接上发送多个消息吗?如果可以,该怎么办?

Mar*_*ell 5

TCP套接字只是一个流。您只要继续写就可以了。我怀疑这里的问题是如何将此类流分解为谨慎的消息-为此,您需要在流中添加某种逻辑框架。显然,您不能做的一件事就是“直到流的末尾才能阅读”,因为如果在同一个套接字上发送多个消息,则不适用

对于基于文本的消息,这通常意味着“写每条消息,后跟换行符作为分隔符”(以及“阅读直到获得换行符”)。对于二进制文件,几乎总是以某种方式采用长度前缀的形式。例如,一个简单的协议可能在每个消息之前包含4个字节,作为后续消息长度的32位整数,用小尾数表示,因此在写时就是“写长度,写有效载荷”-在读取时是“读取长度,读取许多字节,处理该消息”(注意:4字节不一定是执行此操作的好方法,因为它无法处理非常大的有效载荷-这是否是问题取决于您的数据想要发送)。

在这两种情况下,由于网络数据包基本上与您调用Write/的次数无关Send,因此您的读取代码将需要缓冲和循环。

另请参阅http://marcgravell.blogspot.com/2013/02/how-many-ways-can-you-mess-up-io.html,其中对此主题有更多的想法。