c# - C#异步套接字概念

标签 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个套接字如何为不同的客户端提供服务。 是否通过套接字在客户端之间进行时间复用?

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

最佳答案

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

要进行验证,可以检查监听套接字和连接的套接字的本地端口;他们应该有所不同。

关于c# - C#异步套接字概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13918410/

相关文章:

javascript - 是否可以暂停/挂起(不要在套接字上接受(2))Node.js 服务器?

iPhone:寻找 API 来存储调查结果

c# - 日期时间字符串格式和 CultureInfo

c# - 如何选择较低级别的项目作为列表框的显示成员

java - HTTP header 结束

php - PHP套接字标准输入附加到接收到的数据

c - udp 套接字 - 绑定(bind)和连接成功,但发送不起作用

c - 使用 epoll_create1() 而不是 epoll_create() 有什么好处

C# BinaryReader.ReadChar 读取 NetworkStream 时抛出 "System.ArgumentException: The output char buffer is too small"

c# - 在 C# 中以编程方式触发复制或粘贴