C#异步套接字概念

时间:2012-12-17 16:52:49

标签: c# sockets network-programming asyncsocket

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

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 socket如何为不同的客户端服务。 是否通过套接字在客户端之间进行多路复用?

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

1 个答案:

答案 0 :(得分:1)

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

要验证,您可以检查侦听套接字的本地端口和连接的套接字;他们应该是不同的。