1

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)です。

4

1 に答える 1