0
我得到了下面的代码:的TcpClient超时ICMP端口不可达
TcpClient client = new TcpClient("server", 5555);
服务器立即发回一个ICMP端口不可达,但程序走约30秒,直到超时了10054错误。
我关闭防火墙,wireshark也捕获数据包,所以它不是windows配置问题。
我怎样才能让TcpClient识别端口不可访问的数据包?
我得到了下面的代码:的TcpClient超时ICMP端口不可达
TcpClient client = new TcpClient("server", 5555);
服务器立即发回一个ICMP端口不可达,但程序走约30秒,直到超时了10054错误。
我关闭防火墙,wireshark也捕获数据包,所以它不是windows配置问题。
我怎样才能让TcpClient识别端口不可访问的数据包?
开放端口立即返回由TcpClient立即处理的ICMP数据包,但带有关闭/阻塞的端口“端口不可达”响应TcpClient必须等待至30秒超时。您可以通过使异步调用如下所示更改超时方法:
TcpClient client = new TcpClient();
client.BeginConnect("server", 5555, new AsyncCallback(CallBack), client);
private void CallBack(IAsyncResult result)
{
bool connected = false;
using (TcpClient client = (TcpClient)result.AsyncState)
{
try
{
client.EndConnect(result);
connected = client.Connected;
}
catch (SocketException)
{
}
}
if (connected)
{
this.Invoke((MethodInvoker)delegate
{
// Do Something
});
}
else
{
this.Invoke((MethodInvoker)delegate
{
// Do Something
});
}
}
在相同的30秒超时后不会调用“CallBack”吗? –