socket.connect() 関数を停止するという問題に直面しています。ローカル マシンとリモート マシン間の物理リンクは良好な場合がありますが、何らかの理由でリモート エンドポイントにアクセスできません。ファイアウォールまたはリモート マシンのポートが閉じている可能性があります。そのような場合、socket.connection() 関数はそこにスタックし、無限に長い時間待機します...後でファイアウォールを無効にしても、関数はそこに永遠にスタックします。
そのため、上記の状況に直面したときに socket.connect() を停止する方法を見つけようとしました。
問題は、タイムアウトメカニズム、タスク、または socket.beginconnect(); を持たない .net マイクロフレームワークを使用していることです。
私は socket.connect() 自体をスレッドにして、(!thread.join(2000)) の場合は 2 秒後に中止しようとしました。しかし、私はabort()関数をよく理解していません。その方法は賢明ではないと聞いたことがありますが、結局うまくいきません。
今、私はそれについて何をすべきかわかりませんか?誰でも助けることができますか?ありがとう
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
}