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

时间:2013-10-14 10:48:41

标签: c# sockets

我遇到一个问题:在调用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();

控制台中的结果:

SERVER.EXE

  

服务器启动。

     

积压是一个

Client.exe(实例1)

  

输入端口号:9900

     

客户启动。 IP地址:127.0.0.1:3200端口:9900

     

Client.exe(实例2)

  

输入端口号:9901

     

客户启动。 IP地址:127.0.0.1:3200,端口:9901“

     

无法建立连接,因为目标计算机是主动的   拒绝了它127.0.0.1:3200

     

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

SERVER.EXE

  

积压是三个

Client.exe(实例2)

  

输入端口号:9901

     

客户启动。 IP地址:127.0.0.1:3200,端口:9901“

     

无法建立连接,因为目标计算机是主动的   拒绝了它127.0.0.1:3200

     

Client.exe(实例3)

  

输入端口号:9902

     

客户启动。 IP地址:127.0.0.1:3200,端口:9902“

     

无法建立连接,因为目标计算机是主动的   拒绝了它127.0.0.1:3200

     

似乎Listen(3)无效。

1 个答案:

答案 0 :(得分:1)

using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
sock.Bind(new IPEndPoint(IPAddress.Any, 9999));
sock.Listen(1);
sock.Listen(3);
}

有关.NET套接字的更多参考:http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.listen.aspx