Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C Socket编程中调用Listen后重置backlog_C#_Sockets - Fatal编程技术网

C# 在C Socket编程中调用Listen后重置backlog

C# 在C Socket编程中调用Listen后重置backlog,c#,sockets,C#,Sockets,我有一个问题:在调用Listenbacklog之后,是否可以在运行时重置服务器的backlog值 目的是设计一个服务器,允许用户重新分配等待接受的最大连接数;无需重新启动服务器 有解决办法吗 [更新] 我已经按照安德鲁的建议进行了测试 服务器: IPHostEntry entry = Dns.Resolve("localhost"); IPAddress hostIPAddress = entry.AddressList[0]; IPEndPoint localEndPoint = new IP

我有一个问题:在调用Listenbacklog之后,是否可以在运行时重置服务器的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();
控制台中的结果:

Server.exe

服务器启动

积压就是其中之一

Client.exe实例1

输入端口号:9900

客户端启动。iPAddress:127.0.0.1:3200端口:9900

真的

Client.exe实例2

输入端口号:9901

客户端启动。iPAddress:127.0.0.1:3200,端口:9901

无法建立连接,因为目标计算机处于活动状态 拒绝127.0.0.1:3200

假的

然后输入服务器的密钥,关闭Client.exe实例2

Server.exe

待办事项有三项

Client.exe实例2

输入端口号:9901

客户端启动。iPAddress:127.0.0.1:3200,端口:9901

无法建立连接,因为目标计算机处于活动状态 拒绝127.0.0.1:3200

假的

Client.exe实例3

输入端口号:9902

客户端启动。iPAddress:127.0.0.1:3200,端口:9902

无法建立连接,因为目标计算机处于活动状态 拒绝127.0.0.1:3200

假的

听上去好像不管用


有关.NET套接字的更多参考信息:

您是否尝试过这样做?是否有文档证明这样做有效,或者您是否测试过它?这将使答案具有权威性。我的测试范围是:我运行了它。。。它没有引发异常。对我来说已经足够好了+1@Andrew当前位置我已经按照你的建议试过了,但没有如我所预料的那样奏效。第一个sock.Listen1只接受一个挂起的连接,就可以了。然后调用sock.Listen3,但第二个连接仍然被拒绝。您应该将该代码添加到问题中,以便我们查看。
using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
sock.Bind(new IPEndPoint(IPAddress.Any, 9999));
sock.Listen(1);
sock.Listen(3);
}