在C#中我试图测试到这样一个端口的连接:
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
socket.Connect(telco.Address, telco.Port);
端口可用时效果很好。但是,当端口不可用时(例如,TCP / 81上的google.com),它需要很长时间(约60秒)才能超时。这是一个状态页面,所以我想要相对快速地失败。
我尝试将socket.SendTimeout和socket.RecieveTimeout设置为5000毫秒(5秒),但似乎没有效果。
答案 0 :(得分:1)
我最终使用与此类似的代码来保持简洁性:
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IAsyncResult result = socket.BeginConnect(telco.Address, telco.Port, null, null);
bool connectionSuccess = result.AsyncWaitHandle.WaitOne(5000, true);
答案 1 :(得分:0)
认为你正在寻找socket.ReceiveTimeout();
或使用beginConnect()并使用AutoResetEvent等同步工具来捕捉超时。
答案 2 :(得分:0)
要精确控制超时,请执行以下操作:
Application.DoEvents()
Thread.Sleep()
所需的超时间隔。或者使用其他方法让时间过去Socket.Close()
来中断连接尝试。是的,您将在尝试连接的线程中获得异常,但您可以安全地吞并它并假设一切正常。
http://msdn.microsoft.com/en-us/library/wahsac9k(v=VS.80).aspx Socket.Close()