2013-10-14 49 views
1

我有一個問題:我可以在運行時間中重置backlog值,因爲我調用了Listen(backlog)在調用C#Socket編程中的Listen之後重置積壓

其目的是設計一個服務器,允許用戶重新分配等待接受的最大連接數;而無需重新啓動服務器。

有沒有解決方案呢?

[已更新] 我已經測試過安德魯的建議。

服務器:

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

客戶端開始。 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)

SERVER.EXE

積壓爲三

Client.exe(例如2)

輸入端口號:9901

客戶端啓動。 IP地址: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)無法正常工作。

+0

你試圖做到這一點了嗎? – Andrew

回答

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

+0

這是記錄的工作還是您測試它?這會使答案具有權威性。 – usr

+0

我的測試範圍是:我跑它......並沒有拋出異常。 – Andrew

+0

對我來說夠好。 +1 – usr