1:进行socket通信,使用TCP,recv和send是否是一一对应的问题
如果不出现一一对应的问题,那么既有可能是所谓的“TCP粘包”,tcp是一个流协议,没有报文边界,TCP协议会将连续多次发送的数据进行重新组合(数据顺序不会变),send与recv不是一一对应的。对于短时间内多次发送的少量数据会合并到一起,只要接收端给定的缓冲区足够大,会一次接收近来;对于较大量的数据,会分多次发送,接收端一次只能接收到部分数据
解决办法:
send之前设置下socket:
char bOpt=1;
setsockopt(s,IPPROTO_TCP,TCP_NODELAY,&bOpt,1);
send(......)......