如果一个异步服务器socket. beginaccept()为每个客户端套接字分配一个新端口启动一个新线程,我的客户端套

本文关键字:一个 客户端 新线程 启动 新端口 我的 线程 socket 服务器 异步 beginaccept | 更新日期: 2023-09-27 18:05:06

我正在阅读这个microsoft异步服务器服务器套接字示例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();
        }

问题1:

当新的客户端套接字加入我的服务器套接字时,服务器为每个客户端启动一个新线程,并且每个服务器线程都有自己的端口号据我所知。如果是这样,我的新客户端如何知道连接到哪个端口?服务器的IP地址是相同的,但端口必须为每个新客户端更改。然而微软代码在他们各自的异步客户端示例(在上面页面的底部)中没有这样的事情

问题2:

如果我不使用最后一行呢?allDone.WaitOne ();当创建新线程监听新客户端时,它会创建一个疯狂的无限循环吗?

谢谢你的时间,如果你能在回答中详细说明一下,我将非常感激,因为同样的事情用不同的语言说两遍真的很好。

如果一个异步服务器socket. beginaccept()为每个客户端套接字分配一个新端口启动一个新线程,我的客户端套

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