相关疑难解决方法(0)

微软异步服务器套接字示例

我有一个关于这个问题的问题("异步服务器套接字多个客户端").

要么微软改变了这个例子,因为Groos回答或者我真的没有得到它 - 在示例中它说:

        while (true) {
            // Set the event to nonsignaled state.
            allDone.Reset();

            // 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();
        }
Run Code Online (Sandbox Code Playgroud)

据我所知,在while(true)循环中连续调用BeginAccept()函数,只有在调用AcceptCallback()函数时才会被调用,因为首先发生的是allDone.Set().

但格罗说

MSDN示例的问题在于它只允许连接单个客户端(listener.BeginAccept只调用一次).

实际上我不明白为什么使用ManualResetEvent allDone ...而且我认为listener.EndAccept(ar)方法无论如何都是阻塞的.

listener.BeginAccept()是否在仍然运行时第二次调用时抛出异常?但是,如果是这样,为什么allDone.Set()在listener.EndAccept(ar)之前呢?

还有一个问题:

在收到EOF后,我可以在ReadCallback(IAsyncResult ar)函数中调用handler.BeginReceive(...)来等待来自同一客户端的更多数据吗?

任何有经验的人都可以向我解释一下吗?

谢谢 !

c# sockets asynchronous tcp server

5
推荐指数
1
解决办法
5490
查看次数

标签 统计

asynchronous ×1

c# ×1

server ×1

sockets ×1

tcp ×1