TCP服务器有多线程,每个线程都可能随时使用同一个socket发送数据到客户端,数据是数据包的形式,每个包不定长,但是每个包的最前面有包头,包括后面数据包的内容,总长和版本信息。现在出现的问题是,由于服务器是多线程的,客户端收到一个数据包头后,发现有时候在包头后跟的信息并不是这个包头应该跟的信息,也就是说每个数据包被错开了,我已经在服务端socket使用了TCP_NODELAY,包头和数据体也是一次发送的(同一个send),但似乎并没有解决问题。
请问这个问题如何解决?
请问这个问题如何解决?
建议楼主修改模型吧。下苦功夫,长痛不如短痛。
要不然就用异步模型,并且对SOCKET操作时加锁。
当发送或接收时返回-1,并且wasgetlasterror返回10035,表示前一个IO还没有完全传递,需要等待一下。可以sleep 10毫秒。