我正在面臨停止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
而不是使用線程進行連接,您可以創建一個線程超時。然後,您可以離開第二個線程,而不需要任何代碼,如中止或中斷。它會自動清理。 –