Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果异步服务器socket.beginacept()为每个客户端套接字启动一个新线程,并分配一个新端口,那么我的客户端套接字如何知道该端口?_C#_.net - Fatal编程技术网

C# 如果异步服务器socket.beginacept()为每个客户端套接字启动一个新线程,并分配一个新端口,那么我的客户端套接字如何知道该端口?

C# 如果异步服务器socket.beginacept()为每个客户端套接字启动一个新线程,并分配一个新端口,那么我的客户端套接字如何知道该端口?,c#,.net,C#,.net,我正在阅读这个microsoft异步服务器套接字示例 问题1: 当新的客户端套接字加入我的服务器套接字时,服务器为每个客户端启动一个新线程,据我所知,每个服务器线程都有自己的端口号。如果是这样,我的新客户端如何知道要连接到哪个端口?服务器的IP地址是相同的,但每个新客户端的端口都必须更改。然而微软代码在他们各自的异步客户机示例中(在上面页面的底部)并没有这样做 问题2: 如果我不使用最后一行怎么办。 全部完成。WaitOne(); 当创建新线程侦听新客户机时,它会创建一个疯狂的无限循环吗 感谢您

我正在阅读这个microsoft异步服务器套接字示例

问题1:

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

问题2:

如果我不使用最后一行怎么办。 全部完成。WaitOne(); 当创建新线程侦听新客户机时,它会创建一个疯狂的无限循环吗


感谢您的时间,如果您能在回答中详细说明一下,我将不胜感激,因为同样的事情用不同的词说了两遍,这确实很好:)

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

事实上,上面的代码是microsoft的,他们用了。等等。。。“挂起”是指“积木”吗?或者您的意思是程序流立即移动到下一行而不等待?谢谢,我的意思是阻塞-我刚才一定有一个想法-我会更新的,thx。那么…Asynchronous.BeginAccept()方法实际上是同步的,因为它阻塞了?我的大脑融化了是的,对不起-我的大脑今天一定是缺糖了:/
beginacept
不会阻塞-这就是
Begin
部分的重点,所以你确实需要等待。有一个异步回调,然后用allDone包装它,让整个狗和小马完全同步,有什么意义?allDone只是微软的打字错误吗?
        // 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();
        }