Tcp server是如何一个端口处理多个客户端连接的(一对一还是一对多)

编程入门 行业动态 更新时间:2024-10-26 14:39:23

Tcp server是如何一个端口处理<a href=https://www.elefans.com/category/jswz/34/1771377.html style=多个客户端连接的(一对一还是一对多)"/>

Tcp server是如何一个端口处理多个客户端连接的(一对一还是一对多)

我们经常看到说,TCP 是一对一的两点服务,UDP 支持一对一、一对多、多对多的交互通信。但是使用Tcp工具通讯时,一个Tcp服务端可以连接多个Tcp客户端。所以这里的一对一和一对多是不是冲突了?

并不是。一对一指的是Tcp连接,什么是Tcp连接,这里直接粘贴小林大神的解释。

这些控制信息的组合可以称为连接。那么一对一的意思就是一个控制信息的组合只能针对一个Tcp客户端。

那么Tcp工具是如何实现一对多的通讯的呢?


我这里使用工具建立了一个TCP服务端(5679)和两个TCP客户端(6159和6259)。
网上我看有人解释这个问题是,说是tcp服务端处理多个连接时,内部又创建了新的端口来处理。错!!!我们看下windows上tcp套接字信息就知道了

这里套接字指的是如通信对象的 IP 地址、端口号、通信操作的进行状态等信息。 图中一行相当于一个套接字。为什么需要套接字概念,讲到一对多的实现时就知道了。

可以看到tcp服务端的端口一直都是5679,并没有其他端口显示,所以tcp服务端一直只有一个端口!!!

那tcp服务端是如何处理多用户的连接的呢?

先说结论,服务端的Socket程序做了处理。所以TCP是一对一,Socket实现了一对多

服务端的socket程序分成两个模块,即等待连接模块和负责与客户端通信的模块 。当服务器程序启动并读取配置文件完成初始化操作后,就会运行等待连接模块。这个模块会创建套接字,然后进入等待连接的暂停状态。接下来,当 客户端连发起连接时,这个模块会恢复运行并接受连接,然后启动客户端通信模块,并移交完成连接的套接字。接下来,客户端通信模块就会使用已连接的套接字与客户端进行通信,通信结束后,这个模块就退出了。


在复制出一个新的套接字之后,原来那个处于等待连 接状态的套接字会怎么样呢?其实它还会以等待连接的状态继续存在,当再次调用 accept,客户端连接包到 达时,它又可以再次执行接受连接操作。接受新的连接之后,和刚才一样,协议栈会为这个等待连接的套接 字复制一个新的副本,然后让客户端连接到这个新的副本套接字上。

更详细的原理见下图

非常建议去看《网络是怎样连接的》。其他不说了有问题可以多交流。

更多推荐

Tcp server是如何一个端口处理多个客户端连接的(一对一还是一对多)

本文发布于:2024-02-08 20:52:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674910.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   端口   客户端   Tcp   server

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!