TCP如何知道已接收完数据
客户端在发送二进制报文的时候,一般都是send(buf,size)这样,buf里的内容没什么规律。
服务端在接收时会触发一个接收事件receive(buf,len),len就是接收到的长度。由于TCP是长连接,服务端是怎么知道客户端这次的数据已发完,进而得到len的?
[解决办法]
你客户端分2次连续send
包1 11 22 33
包2 44 55 66
包1 包2都会放入系统缓冲区等待发送,如果包1未及时发出,那么非常可能导致包1 包2一起被发出,你服务器端收到就是11 22 33 44 55 66,你本意是2个包,但是服务器端收到的是一个包,必须得有协议拆开,固定长度,包头带长度,包尾结束符,显然固定长度不可能,包头带长度是最好的解决办法,我目前看的所有网游包头都带长度。