首页 > 解决方案 > C#设置接收超时(最佳/充足时间)

问题描述

我想知道接收/发送超时的最佳时间是什么时候

tcpSocket.ExclusiveAddressUse = true;
tcpSocket.LingerState = new LingerOption (true, 10);
tcpSocket.NoDelay = true;
tcpSocket.ReceiveTimeout = 5000;
tcpSocket.SendTimeout = 5000;
tcpSocket.Ttl = 42;
Console.WriteLine("Tcp Socket configured:");

我正在使用 5 秒,但我觉得它很高.. 在 .net 示例中,他们设置为 1 秒,所以

标签: c#.nettcpwebsocket

解决方案


根据 msdn,超时定义如下:

Receive Timeout :Gets or sets the interval of time that a connection can remain inactive, during which no application messages are received, before it is dropped.
Send Timeout : Gets or sets the interval of time provided for a write operation to complete before the transport raises an exception.

我会将接收超时保留为默认值(无限),因此当您有空闲通道时,连接不会关闭。除非您运行保持活动状态,它会定期发送零字节的消息。

发送超时您必须小心将值设置得太低。TCP 是可靠的,这意味着每个数据报都会得到一个确认。当一个 ack 没有被发送时,另一个数据报被正常发送最多 3 次重试。

当通道缓慢重试开始发生时 TCP 会发生什么,这会发送额外的重复数据报,然后会进一步减慢通道速度,直到重试次数过多以至于没有数据通过。

此外,当连接的接收端运行缓慢时,可能不会立即发回确认信息。所以你必须允许接收结束时间来发出确认。通常 ack 是由网卡自动完成的,应该不是问题。

此外,您还必须考虑是否有病毒检查程序或防火墙正在拦截消息。


推荐阅读