0

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

4

1 回答 1

5

TCP 套接字只是一个流;你只需继续写信给它。我怀疑这里的问题是如何将这样的流分解为谨慎的消息 - 因为您需要在流中添加某种逻辑框架。显然,您不能做的一件事是“读取直到到达流的末尾”,因为如果通过同一个套接字发送多条消息,那将不适用。

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

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

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

于 2013-06-03T08:38:16.933 回答