如何在c#中使用TCP套接字发送多条消息而不关闭套接字连接

本文关键字:套接字 消息 连接 TCP | 更新日期: 2023-09-27 18:16:27

我需要使用c#在TCP套接字连接上发送多个消息,这是可能的吗?如果有,该怎么做?

如何在c#中使用TCP套接字发送多条消息而不关闭套接字连接

TCP套接字只是一个流;您只需继续写入。我怀疑这里的问题是如何将这样的流分解成离散的消息-为此您需要在流中添加某种逻辑。显然,不能做的一件事是"读取直到到达流的末尾",因为如果通过同一个套接字发送多个消息,不适用

对于基于文本的消息,这通常意味着"在每条消息后面写一个换行符作为分隔符"(以及"读取直到得到换行符")。对于二进制,它几乎总是以某种方式采用长度前缀的形式。例如,一个简单的协议可能包括4个字节之前每个消息的低位优先的32位整数表示以下消息的长度,所以当写作是"写长度,写负载"——当阅读"长度,读过许多字节,过程信息"(注:4字节不一定是一个好方法,因为它不能处理非常大的载荷——这是一个问题是否取决于您想要发送的数据)。

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

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