文章目录一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务三.多线程版的TCP网络程序四.线程池版的TCP网络程序五.守护进程1.进程知识补充2.守护进程一.简单的TCP网络程序1.服务端创建套接字我们将TCP服务器封装成一个类,当我们定义出一个服务器对象后需要马上对服务器进行初始化,而初始化TCP服务器要做的第一件事就是创建套接字。TCP服务器在调用socket函
一、TCP与UDPTCP/IP协议族为传输层指明了两个协议:TCP和UDP,它们都是作为应同程序和网络操作的中介物。TCP(TransmissionControlProtocol)协议全称是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。TCP是面向连接的、可靠的流协议,提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等。在传输数据前,双方会先建立一条虚拟的通道,可以减少数据传输差错。传输流
文章目录TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TIME_WAIT状态引起的bind失败解决方案listen的第二个参数TCP协议TCP(传输控制协议)是一种基于连接的协议,用于在计算机网络中实现可靠的数据传输。它是互联网传输层的核心协议之一。TCP协议格式TCP报文中每个字段的含义如下:源/目的端口号:表示数据是从哪个进程来,到哪个进程去;32位序号
正常使用命令dockerpullredis之后启动 dockerrun--namem-redis-p8379:6379-v/data/redis/redis.conf:/usr/local/etc/redis/redis.conf-dredis发现容器并没有启动,于是查看了一下logs [root@localhostredis]#dockerlogsm-redis1:C25Sep202304:03:47.852#WARNINGMemoryovercommitmustbeenabled!Withoutit,abackgroundsaveorreplicationmayfailund
目录1、通过Socket建立服务端:2、UI设计:3、代码的实现:(1)、CListenSocket类(2)、CConnectSocket类(3)、CTcpServerDlg类1、通过Socket建立服务端:(1)、创建一个Socket对象并绑定一个端口:CListenSocket监听Socket(2)、通过Listen()函数,监听来自客户端的连接请求(3)、连接请求到来之后,建立一个通信用的Socket,CConnectSocket,并且加入数组中(4)、使用Send()、Receive()函数,接收客户端发送的数据,并遍历数组,一次转发消息2、UI设计:3、代码的实现:(1)、CList
目录1、客户端创建流程:2、UI设计:3、代码实现:(1)、ConnectSocket中重写OnReceive函数接收信息(2)、框架类入口函数初始化(3)、加入房间功能实现(4)、离开房间功能实现(5)、发送消息功能实现(6)、OnPendingRead函数实现4、最终运行结果:1、客户端创建流程:(1)、创建一个Socket对象并且自动绑定一个端口。(2)、调用Connect()函数,建立一个到服务端的连接。(3)、发送一个特殊消息进入房间enter。(4)、使用Receive()函数,Send函数收发数据。(5)、发送一个特殊消息退出房间leave。2、UI设计:3、代码实现:(1)、C
现象1:发送缓慢,tcp_write之后要等200多ms才能过发送出去,而且粘包严重。解决办法tcp_write之后,立马调用tcp_output,tcp就会立马发送。tcp_writetcp_output现象2:持续快速发送和接受TCP数据出现断言pbufsonqueue=>atleastonequeuenon-emptytcp_receive:validqueuelength而且出现TCP断连,死机情况。其实就是一句话主程序和以太网中断程序中对PCB->unsent之类的处理出现了问题,tcp_write不是没有临界保护,导致中断和主程序直接出现了共同操作((pcb)->snd_buf)(
文章目录前言一、理论准备Socket套接字是什么TCP协议的特点二、TCP流套接字提供的APIServerSocketAPISocketAPI三、代码实现请求响应式客户端服务器服务器客户端疑惑解答为什么服务器进程需要手动指定端口号而客户端进程不需要为什么客户端中的服务器IP与端口号是"127.0.0.1"与9090为什么服务器Socket对象要关闭,ServerSocket对象却不用,客户端的Socket对象也不用关闭缓冲区是什么?为什么要手动刷新缓冲区???总结前言本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家
上面的图表是从发送方的角度拍摄的快照。我们可以将数据分为4组:已发送并已确认的字节(蓝色)已发送但尚未确认的字节(黄色)未发送但接收方准备好接收的字节(绿色)未发送且接收方未准备好接收的字节(灰色)第3类也称为可用窗口,因为这是发送方可以使用的窗口。发送窗口包括黄色和绿色部分。这些字节要么已经被发送,要么可以被发送。1*OqqxQKu4ZGasXzIlUZ9lyw.png可用窗口在发送方发送了21-25字节并使用了可用窗口中的所有字节时可能为空。发送窗口保持不变。1*JdTCgvYpVPRDcLyVb8Rwsg.png当发送方接收到16-19字节的确认时,发送窗口向右滑动4个字节。队列中的接下
TCP1.什么是TCPTCP是处于运输层的通信协议,该协议能够实现数据的可靠性传输。2.TCP报文格式源端口和目的端口:各占两个字节,发送进程的端口和接收进程的端口号。序号:占4个字节,序号如果增加到溢出,则下一个序号从0开始,在TCP传输过程中,传送的每一个字节流都是按顺序编号的。首部中的序号指的是发送数据的第一个字节流的编号。例如当前发送第一个字节流序列号为201,数据部分一共100个字节,那么下一次发送的序号就是301.确认号:占4字节,期望收到对方下一个报文段数据第一个字节的编号。数据偏移:占4位,单位是4字节,TCP报文的的首部长度。保留字段:占6位,保留今后使用。控制字段6位:第一