【发布时间】:2015-03-13 21:42:49
【问题描述】:
我正在尝试创建套接字并连接到设备。当设备不在网络中并且我尝试连接时会出现问题。我得到错误的响应(这没关系,我更新设备状态的依据是),但问题是我在 21 秒内得到响应。我正在使用此功能进行连接:
public bool Connect(IPEndPoint ipEndPoint, IPAddress ipAddress, Guid id, bool isAlive)
{
try
{
clSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
clSocket.NoDelay = false;
clSocket.ReceiveTimeout = 1000;
clSocket.SendTimeout = 1000;
clSocket.Connect(ipEndPoint);
return true;
}
catch (Exception ex)
{
return false;
}
}
尽管我读到“21 秒超时”,但我发现我必须更改寄存器:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
值名称:TcpMaxDataRetransmissions
数据类型:REG_DWORD - 数字
有效范围:0 - 0xFFFFFFFF
默认值:3
我正在参考这篇文章:
http://getin2me.blogspot.com/2010/08/are-you-also-facing-windows-sockets-21.html
和这篇文章:
https://social.msdn.microsoft.com/Forums/en-US/fd586377-34b3-4cb8-a3af-0a24c608e399/connectex-winsock-question?forum=vcgeneral
为什么在 Windows 8 中我找不到这个寄存器?有没有其他解决方案可以让我快速(快速我的意思是正常
【问题讨论】:
-
这些注册表项默认情况下不存在。它们仅用于延长超时。
-
所以我应该添加它们还是...?
标签: c# sockets networking network-programming