プログラムでソケットを「バインド」する方法は?
質問
1)ソケットは、プロセスが終了するまでローカルエンドポイントからバインドされていないようです。
2)私は他の質問から解決策を試しましたが、また1分間待ってみました - 役に立たなかった。
3)ソケットとその接続を取り除くために以下を試してみました。
public static void killUser(User victim)
{
LingerOption lo = new LingerOption(false, 0);
victim.connectedSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Linger, lo);
victim.connectedSocket.Shutdown(SocketShutdown.Both);
victim.connectedSocket.Disconnect(true);
victim.connectedSocket.Close();
clients.RemoveAt(victim.ID);
}
4)少しグーグルでグーグルで、ポートを外すことができないように思われるため、十分な量の接続クライアントがあれば、最終的にはポートを使い果たして耳を傾けます。
解決
接続されているクライアントのソケットをサーバーソケットと混同しているのではないかと思います。
サーバーソケットは、特定のポートで着信接続をリッスンするものです。その機能で閉じるソケットは、(潜在的に多くの)リモート接続の1つへのパイプです。
「ポートをバインドする」ために、シャットダウン/閉じることをお勧めします サーバ ソケット。
混乱を解消するために更新します
.bind(endpoint)に電話をかけた「サーバー」ソケットが必要で、その後、.listen()に電話がかかります。これは、「バインド」に近づき、後でポートを解放するソケットです。
次に、「サーバー」ソケットが新しい接続を受け入れるたびに参照を取得する複数の「クライアント」ソケットがあります。これらはすべて、問題なく同じポートにバインドできます。これらの接続の1つを閉じてクライアントを切断するには、今していることをしてください。実際にメソッドをトリミングできます。
- シャットダウン
- 選ぶ
- リストから削除します
切断され、残りは不要です。
所属していません StackOverflow