我正在阅读这个微软异步服务器服务器套接字示例http://msdn.microsoft.com/en-gb/library/fx6588te.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1
// Bind the listener socket object to the local endpoint and
// listen for incoming connections.
try {
listener.Bind(localEndPoint);
listener.Listen(100);
while (true) {
// Set the event to nonsignaled state.
allDone.Reset(); //allDone is a ManualResetEvent
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...");
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener );
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
问题一:
当新的客户端套接字加入我的服务器套接字时,服务器为每个客户端启动一个新线程,据我所知,每个服务器线程都有自己的端口号。如果是这样,我的新客户端如何知道要连接到哪个端口?服务器的 IP 地址相同,但每个新客户端的端口必须更改。然而微软代码在他们各自的异步客户端示例中没有做这样的事情(在上面页面的底部)
问题2:
如果我不使用最后一行,即 allDone.WaitOne(); 怎么办?当创建新线程以侦听新客户端时,它会创建一个疯狂的无限循环吗?
感谢您抽出宝贵的时间,如果您能在答案中详细说明一下,我将非常感激,因为同一件事用不同的词说了两次真的很好:)