如果这已在 SO 上得到回答,我深表歉意。我看了但没找到。我的情况是我的客户可以通过本地网络或通过 Verizon 调制解调器远程连接到他们的 TCP 服务器。(我正在使用 .NET 3.5 - C#)
当我从其中任何一个连接时,一切都很好。但是如果我不小心在“错误”的网络上(例如:我在星巴克并登录到他们的无线网络。我忘记了,以为我在 Verizon 卡上,所以,现在我尝试登录)服务器拒绝联系。美好的。但是我的 Try/Catch 没有捕获任何东西......它只是退出例程(如果我通过线程池调用它)或者如果我直接调用它会挂起。
这是代码(失败: m_clientSocket.Connect(ipEnd) ):
tcpConnectionObject passedTCPObject = (tcpConnectionObject) obj;
if (checkNetStat(passedTCPObject) == false)
{
updateStatus(false);
return;
}
try
{
m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(passedTCPObject.ipString);
int iPortNo = System.Convert.ToInt16(passedTCPObject.portString);
IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);
m_clientSocket.Connect(ipEnd);
if (m_clientSocket.Connected)
{
updateStatus(true);
//Wait for data asynchronously
WaitForData();
}
}
catch (SocketException e)
{
updateStatus(false);
return;
}
catch (Exception e)
{
updateStatus(false);
return;
}
updateStatus(true);
return ;
我使用线程池从 Winform 调用它:
tcpConnectionObject passObject = new tcpConnectionObject(serverIP, serverPORT);
ThreadPool.QueueUserWorkItem(new WaitCallback(SRVR_CONNECT.connectToTCP), passObject);
这在表单的 SHOW() 方法中调用。当我这样做时,我的表单会显示,但状态永远不会改变(它应该是任何结果)如果我在上面放置一个调试器,并开始逐步执行,我会到达 Socket.Connect()并且调试器只是退出了方法,我的表单就显示出来了。我从来没有击中过我的任何球。
我已经尝试了 Socket 可以生成的所有错误,但它从来没有捕获任何东西。当我运行调试器时,只要我点击该行,它就会退出我的方法,但没有可以捕获的错误。