我正在面临停止socket.connect()函数的问题。 有时我的本地机器和远程机器之间的物理连接可能很好,但由于某种原因,远程终端无法访问,可能是防火墙或远程机器上的端口关闭。在这种情况下,socket.connection()函数将停留在那里并等待无限的长时间......即使防火墙稍后被禁用,该函数仍然会永久停留在那里。如何阻止socket.connect()函数?
所以我试图找到一种方法来阻止socket.connect()当面临上述情况。
事情是我使用.net微型框架,其中我没有超时机制或任务或socket.beginconnect(); (!thread.join(2000))我试图使socket.connect()本身是一个线程,并试图在2秒后中止()它。但是,我不太明白abort()函数,我听说它是一种不明智的方式来执行此操作,并且它不起作用。
现在我不知道该怎么办呢?谁能帮忙? thx很多
main function
{
m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//Set up socket
remoteEndPoint = new IPEndPoint(IPAddress.Parse(IP_add), 30000);
m_socket.Connect(remoteEndPoint);
myThread.Start();
if (!myThread.Join(2000))
{
Debug.Print(myThread.ThreadState.ToString());
myThread.abort();
}
}
private static void socket_connect()
{
m_socket.Connect(remoteEndPoint);//Connect to remote device
}
是,放弃是不明智的。直到你理解它之前不要使用它(你现在不理解但正在使用它)。 – usr
@usr雅,我知道,但似乎我没有其他选项 – henryyao
而不是使用线程进行连接,您可以创建一个线程超时。然后,您可以离开第二个线程,而不需要任何代码,如中止或中断。它会自动清理。 –