backlog
を呼び出した後、実行時にサーバーの値をリセットできますかListen(backlog)
。
目的は、受け入れられるのを待っている接続の最大数をユーザーが再割り当てできるサーバーを設計することです。サーバーを再起動せずに。
これに対する解決策はありますか?
[更新] アンドリューの提案としてテストしました。
サーバ:
IPHostEntry entry = Dns.Resolve("localhost");
IPAddress hostIPAddress = entry.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(hostIPAddress, 3200);
sock.Bind(localEndPoint);
Console.WriteLine("Server start");
sock.Listen(1);
Console.WriteLine("Backlog is one.");
Console.ReadKey();
sock.Listen(3);
Console.WriteLine("Backlog is three");
Console.ReadKey();
Client.cs
IPHostEntry entry = Dns.Resolve("localhost");
IPAddress ipAddress = entry.AddressList[0];
IPEndPoint serverEndpoint = new IPEndPoint(ipAddress, 3200);
Console.WriteLine("Enter port number: ");
int port = Convert.ToInt32(Console.ReadLine());
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndpoint = new IPEndPoint(ipAddress, port);
sock.Bind(localEndpoint);
Console.WriteLine(string.Format("Client start. IPAdress: {0}, Port: {1}", ipAddress, port));
try
{
sock.Connect(serverEndpoint);
}
catch (SocketException ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine(sock.Connected.ToString());
Console.ReadKey();
コンソールの結果:
サーバー.exe
サーバー起動。
バックログは1つ
Client.exe (インスタンス 1)
ポート番号を入力してください: 9900
クライアントの開始。IPAdress: 127.0.0.1:3200 ポート: 9900
真実
Client.exe (インスタンス 2)
ポート番号を入力してください: 9901
クライアントの開始。IPAdress: 127.0.0.1:3200、ポート: 9901"
ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:3200
間違い
次に、サーバーのキーを入力し、Client.exe を閉じます (インスタンス 2)
サーバー.exe
バックログは3つ
Client.exe (インスタンス 2)
ポート番号を入力してください: 9901
クライアントの開始。IPAdress: 127.0.0.1:3200、ポート: 9901"
ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:3200
間違い
Client.exe (インスタンス 3)
ポート番号を入力してください: 9902
クライアントの開始。IPAdress: 127.0.0.1:3200、ポート: 9902"
ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:3200
間違い
うまくいかないようListen(3)
です。