如何实现tcpip单个用户与单个服务器通信以及多个用户与单个服务器的通信连接

如何实现tcpip单个用户与单个服务器通信以及多个用户与单个服务器的通信连接,第1张

同学您好,这个问题我分开解答哈!①单个用户与单个服务器通信采用Socket进行连接,用户方面的流程是:1新建套接字Socket s;2确定服务器IP地址和端口号 addr = 192168112 port = 8080;3对本机地址进行显式或隐式绑定(一般采用隐式绑定故这步可以忽略)4开启与服务器的连接connect(s,addr);5进行数据交互传输 send recv;6通信结束 关闭套接字closesocket(s);

服务器方面的流程是:1新建套接字Socket s;2确定本地IP和端口号(不能隐式绑定)addr = 192168112 port = 8080;3对本地IP和端口进行绑定bind(s,addr);4对端口进行监听listen(s);5接收一个连接 newsock = accept(s);6进行数据交互传输 send recv;7通信结束 关闭套接字closesocket(s)。

②单个服务器与多个用户的通信连接,用户端与①中流程相同,服务器端第5步接收了一个连接之后开始不同。服务器在接收了一个连接之后,便新建一个套接字newsock,此时要开启一个子线程来负责处理与该用户机的数据传输,而主线程继续监听端口创建新的子线程来与多个用户进行连接。C下可以采用createThread函数,

CreateThread( NULL,0,
                          chat, //子线程函数入口
                          &newsock, //传给子线程的参数
                          0, &Tid);然后在chat函数中进行recv和send即可

一开始我无法理解,单机怎么可能实现百万并发连接,因为系统可用端口数只有:65535 - 1024 = 64511,每个TCP连接需要占用一个独立的端口,那最多也只能做到6W多并发连接。然而我忽视了一个很基本的问题,端口号在同一个IP下不能重复,但我们可以给一个网卡绑定多个IP地址,如果单机要主动发起100万并发连接,我们最少需要使用17个IP地址。

TCP服务器监听在指定端口接收客户端连接后,创建一个新的socket用于同客户端进行读写数据,但该socket并不需要也不会绑定一个新的端口,所以对于TCP服务器来说,不存在端口不够用的情况,TCP服务器能够保持多少个并发连接取决于服务器性能、内存大小、带宽大小以及服务器端设置(例如:进程能打开的文件数等)。以100W连接数为例,所需要总内存大小大约为:1,000,000 20K = 20G, 广播一个1KB的消息需要占用的带宽:1,000,000 1K = 1000M,所需打开文件描述符1,000,000个。

对于TCP服务器连接数压力测试来说,瓶颈在客户端,因为每个客户端要连接到TCP服务端需要使用一个本地端口,而对于一个IP地址来说,端口范围就是:0-65536,其中还要一些端口被系统或其他程序使用。所以从一台主机单个IP上发起同TCP服务器的连接数理论最大值为65535,当然我们可以给该主机绑定N个IP地址,同时从多个IP发起连接,所以理论上客户端可以发起的连接数为:IP数65535,这时客户端的CPU、内存和带宽以及文件句柄资源就是限制。

一、使用代理不同

1、TCP代理:面向连接的、可靠的、基于字节流的传输层通信协议的代理。

2、UDP代理:无需建立连接就可以发送封装的 IP 数据报的代理。

二、传输方式不同

1、TCP代理:把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由来通过网络将包传送给接收端实体的TCP层。

2、UDP代理:除了给应用程序发送数据包功能并允许在所需的层次上架构自己的协议之外,几乎没有做什么特别的的事情。

三、分组方式不同

1、TCP代理:旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。

2、UDP代理:不提供数据包分组、组装和不能对数据包进行排序的缺点,当报文发送之后,是无法得知其是否安全完整到达的。

参考资料来源:百度百科-UDP

参考资料来源:百度百科-TCP


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13477113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-14
下一篇 2023-08-14

发表评论

登录后才能评论

评论列表(0条)

保存