2

我正在阅读这个微软异步服务器服务器套接字示例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(); 怎么办?当创建新线程以侦听新客户端时,它会创建一个疯狂的无限循环吗?

感谢您抽出宝贵的时间,如果您能在答案中详细说明一下,我将非常感激,因为同一件事用不同的词说了两次真的很好:)

4

1 回答 1

0

创建新连接的事实对您的客户端是透明的 - 他们只需在调用 Connect 时获得连接。

于 2013-03-21T20:54:07.763 回答