1

我一直在做一个项目,我在 C# 中将字符串从客户端发送到服务器。如果你们中的一些人有时间回答,我的问题如下:

  • 我发送我的字符串如下:

    clientStream.Write(buffer, 0, buffer.Length);
    clientStream.Flush();
    

其中clientStream 是一个网络流。但是如果函数处于如下的while循环中,就会出现问题:

while(true)
{
        clientStream.Write(buffer, 0, buffer.Length);
        clientStream.Flush();
}

消息似乎有时在服务器部分交织在一起并损坏。但如果我在 while 循环中添加一个 Thread.Sleep (可能有 30 个作为 in 参数)调用,则不会。我想知道如果它是 TCP 套接字连接,为什么消息会交织在一起?函数如何调用:

clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();

工作?

  • 通过 TCP 套接字连接每秒可以发送多少条消息?速度取决于什么?感谢您的时间!
4

1 回答 1

1

不要总是刷新您的客户端流,您只想在写入周期结束时刷新,否则让 .NET 为您处理。每次发送东西时都刷新是低效的。

还要记住,TCP 流可以以不同的顺序到达,并在接收端重新组装以使用 TCP 序列号,这是透明地完成的,但是如果您通过 wireshark 查看流,那么您可能会看到这一点。

理论上,您可以通过带宽支持的套接字发送尽可能多的数据。但是你永远不应该回复 Thread.Sleeps ,因为有一天这会让你崩溃。依靠时间来进行这样的任何事情都被认为是“肮脏的黑客”并且会导致问题。

于 2012-07-24T16:49:46.523 回答