Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送消息速度套接字_C#_Performance_Sockets_Transfer - Fatal编程技术网

C# 发送消息速度套接字

C# 发送消息速度套接字,c#,performance,sockets,transfer,C#,Performance,Sockets,Transfer,我一直在从事一个项目,在这个项目中,我用C#将字符串从客户端发送到服务器。 如果你们有些人有时间回答,我的问题如下: 我发送的字符串如下所示: clientStream.Write(buffer, 0, buffer.Length); clientStream.Flush(); while(true) { clientStream.Write(buffer, 0, buffer.Length); clientStream.Flush(); } 其中cli

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

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

    clientStream.Write(buffer, 0, buffer.Length);
    clientStream.Flush();
    
    while(true)
    {
            clientStream.Write(buffer, 0, buffer.Length);
            clientStream.Flush();
    }
    
其中clientStream是网络流。但如果函数处于while循环中,则会出现问题 详情如下:

clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
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套接字连接每秒可以发送多少消息?速度取决于什么? 谢谢你抽出时间
      不要总是刷新您的客户端流,您只希望在写入周期结束时刷新,否则让.NET替您处理。每次发送邮件时刷新都是低效的

      还请记住,TCP流可以以不同的顺序到达,并在接收方重新组装,以便使用TCP串行进行操作,这是透明的,但是如果您通过wireshark查看流,那么您可能会看到这一点


      理论上,您可以通过套接字发送带宽支持的任意数量的数据。但你们永远不应该在帖子上回复。睡觉吧,因为总有一天这会让你们心烦意乱。依靠时间来完成类似的事情被认为是一种“肮脏的黑客行为”,并且会引起问题

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

      还请记住,TCP流可以以不同的顺序到达,并在接收方重新组装,以便使用TCP串行进行操作,这是透明的,但是如果您通过wireshark查看流,那么您可能会看到这一点


      理论上,您可以通过套接字发送带宽支持的任意数量的数据。但你们永远不应该在帖子上回复。睡觉吧,因为总有一天这会让你们心烦意乱。依靠时间来完成类似的事情被认为是一种“肮脏的黑客行为”,并且会引起问题

      TCP是基于流的,而不是基于消息的。不要从信息的角度思考。两次调用
      Write
      不一定会导致服务器上两次调用
      Read
      。数据可以在任意点拆分或组合。但是,它始终是连续的。消息不太可能因为TCP而损坏。我猜你只是在不睡觉的情况下往插座上写垃圾。应用程序是否从多个线程写入同一套接字?(当问题是“垃圾输出”时,通常是一个很好的猜测。)了解您是如何创建和初始化
      缓冲区的,以及您是如何在服务器上重新组装消息的,这也是很有趣的。(以及如何确定消息何时开始和结束。)是否连接到自己的计算机?然后,非常重要的是,您的接收代码要继续读取,否则发送方会阻止。同时检查所有字节是否为witten,读取Write的返回值。感谢您的回答!他们真的很有帮助!TCP是基于流的,而不是基于消息的。不要从信息的角度思考。两次调用
      Write
      不一定会导致服务器上两次调用
      Read
      。数据可以在任意点拆分或组合。但是,它始终是连续的。消息不太可能因为TCP而损坏。我猜你只是在不睡觉的情况下往插座上写垃圾。应用程序是否从多个线程写入同一套接字?(当问题是“垃圾输出”时,通常是一个很好的猜测。)了解您是如何创建和初始化
      缓冲区的,以及您是如何在服务器上重新组装消息的,这也是很有趣的。(以及如何确定消息何时开始和结束。)是否连接到自己的计算机?然后,非常重要的是,您的接收代码要继续读取,否则发送方会阻止。同时检查所有字节是否为witten,读取Write的返回值。感谢您的回答!他们真的很有帮助!需要指出的是,除非服务器出于某种原因使用原始套接字而不是TCP,否则从应用程序的角度来看,重新组装是透明和正确的。@millimoose这是完全正确的。我会尝试澄清答案以供思考。谢谢你的回答!他们真的很有帮助!需要指出的是,除非服务器出于某种原因使用原始套接字而不是TCP,否则从应用程序的角度来看,重新组装是透明和正确的。@millimoose这是完全正确的。我会尝试澄清答案以供思考。谢谢你的回答!他们真的很有帮助!