1

这是我的监听功能和连接功能

Socket Listen

public void Listen(){
IPEndPoint ep = new IPEndPoint(IPAddress.Any, PortNumber);
Listen.Bind(ep);
Listen.Listen(10);
Listen.BeginAccept(new AsyncCallback(NewConnection), null);}

public void NewConnection(IAsyncResult asyn)
{
    Socket Accepted = Listen.EndAccept(asyn);
    Listen.BeginAccept(new AsyncCallback(NewConnection), null);
    SomeFunction(Accepted);
}

代码工作正常,没有问题 - 我跟踪代码以了解如何与不同的客户一起工作,我了解流程。但是,我不明白 1 个套接字如何为不同的客户端提供服务。它是否通过套接字在客户端之间进行时间复用?

我在 MSDN 上读到,Accepted在我的代码中只能用于已建立的连接,不能进一步使用 - 那部分我不明白。当客户端尝试连接到服务器套接字时实际发生了什么?是否EndAccept返回具有不同端口的完全不同的套接字来建立连接并继续使用同一个套接字侦听以同时接受更多请求?

4

1 回答 1

1

根据我的理解,您所说的基本正确。Accepted套接字与Listen. 在 you 之后EndAccept,您可以使用监听套接字启动另一个BeginAccept异步调用,并且可以使用新创建的套接字与远程对等方通信。

要验证,可以检查listen socket的本地端口和connected socket;他们应该是不同的。

于 2012-12-17T17:02:28.650 回答