Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#_Synchronization_Sockets - Fatal编程技术网

C#套接字,发送过程中经过的时间

C#套接字,发送过程中经过的时间,c#,synchronization,sockets,C#,Synchronization,Sockets,我想知道是否有办法知道数据在网络上传输的时间 例如,我从计算机a向计算机B和C发送一个数据包(因此,根据距离等不同,每个数据包的运行时间可能不同),我想知道每个客户机发送和接收数据之间的时间(以便精确同步数据) 此外,重要的是要知道我的客户机必须在异步模式下工作(这不是问题) 有人知道怎么做吗 KiTe.除非所有节点都有同步时钟,否则这几乎是不可能做到的。如果您确实有一个精确的同步机制,并且可以相信时钟是相同的,那么当您从a发送数据包时,您可以在数据包中插入一个时间戳,然后在C中将其与当前时间进

我想知道是否有办法知道数据在网络上传输的时间

例如,我从计算机a向计算机B和C发送一个数据包(因此,根据距离等不同,每个数据包的运行时间可能不同),我想知道每个客户机发送和接收数据之间的时间(以便精确同步数据)

此外,重要的是要知道我的客户机必须在异步模式下工作(这不是问题)

有人知道怎么做吗


KiTe.

除非所有节点都有同步时钟,否则这几乎是不可能做到的。如果您确实有一个精确的同步机制,并且可以相信时钟是相同的,那么当您从a发送数据包时,您可以在数据包中插入一个时间戳,然后在C中将其与当前时间进行比较

但同样,这种方法需要高分辨率的时间同步

如果您只想进行基准测试并了解平均时间,那么您可以做的是使数据包反弹回来。基本上,告诉C将相同的数据包发送回B,然后发送回A,在A中,您将原始时间戳与当前时间(将使用相同的时钟)进行比较。这将为您提供一个往返延迟,您可以将其除以2以获得单向延迟时间

如果您担心回发消息会增加开销,那么您可以执行以下一项(或两项)操作

  • 寄回一个小得多的包裹。基本上是一个整数,对应于接收到的消息的序列号
  • 仅每N条消息发送一次确认。应提供足够的数据,以了解“典型”延迟时间
  • 是一款专门针对延迟分析的知名软件。
    对于您的分析,涉及到软件和硬件的几个不同层次,因此实现起来非常复杂。

    在进行同步时,更重要的是要有一个可靠的密钥,如序列号-当您使用TCP时,当丢失一个包出现问题时,您会遇到一个很大的问题,因为这会触发对多个包的重新请求。

    问题是我需要相当高的发送/接收速率,因此,发送回数据肯定会减慢全局appp。我想知道他们在fps或rts这样的游戏中是怎么做的:即使有一个中央服务器充当主机之间的交换机,仍然会有延迟(可能达到数百毫秒),但基本上,当我用套接字发送数据包时,我不应该收到ACK吗?(因为我使用tcp套接字)然后我可以比较我得到ACK的时间和我发送数据的时间?但是对于.NET套接字,不可能这样做,因为“结束发送”或“发送”并不意味着对等方实际接收到的数据……我假设您所说的ACK在传输层,不一定符合您想要的ACK。您可以将数据包拆分为多个较低级别的数据包,每个数据包具有不同的ACK。做到这一点的唯一方法是自己实现ACK逻辑,使用一种类似于我在回答中描述的机制。如果你担心应用程序的速度会变慢,那么你可以将其设计为每10条消息只接收一次。我使用的是tcp,所以创建序列号应该没有用,对吗?但是,正如我刚才所问的,是否可以通过.NET获取tcp ack,以确保对等方接收到数据?然后应该更容易进行同步(我只需要存储时间差,在每次发送/确认接收时实现,等等),应用层只是假设在发送完成时将接收到它。如果客户响应,您可以猜测时间,但这是一个在一天中也会波动的猜测。