我一直致力于一个项目,我在C#中将字符串从客户端发送到服务器。 如果你们中的一些人有时间回答我的问题如下:
我发送的字符串如下:
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
其中clientStream是NetworkStream。但是如果函数处于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();
工作?
答案 0 :(得分:1)
不要总是刷新客户端流,你只想在写周期结束时刷新,否则让.NET为你处理它。每次发送东西时刷新都是低效的。
还要记住,TCP流可以以不同的顺序到达并在接收方重新组装以使用TCP Serials有意义,这是透明地完成的,但如果您通过wireshark查看流,那么您可能会看到这一点。
理论上,您可以在带宽支持的情况下通过套接字发送尽可能多的数据。但是你永远不应该回复Thread.Sleeps,因为有一天这会让你感到震惊。依赖于任何时间这样的时间被认为是“肮脏的黑客”,并将导致问题。