关于网友提出的“ winsock中连续用两次send会出问题??”问题疑问,本网通过在网上对“ winsock中连续用两次send会出问题??”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: winsock中连续用两次send会出问题??
描述: 我连续两次用send发送数据,中间没有反馈消息,但是那边收到的数据是乱的,MSDN上好象是说系统自动把缓冲区的东西揉在一起发送了
是否有方法可以解决?
解决方案1: 1.服务端
加入一全局变量,以标志客户端是否接收完成,如:int nIsCompleted = 1;
在接收线程中判断客户端发来的接收状态,如接收到客户端发来的"ReceiveCompleted"则
nIsCompleted = 1;
在发送数据函数中用while循环发送数据:
CMyView::SendData()
{
while(nIsCompleted)
{
send(sock,数据包大小,sizeof(数据包大小),0)
while(nSize<>
{
rev = send(sock,buff,sizeof(buff),0);
nSize += sizeof(buff);
}
nIsCompleted = 0;
}
}
2.在客户端只要在接收完后,发送接收完成状态给服务器就可以了,当然接收不完全可以发相应命令叫服务器重发刚才的数据,这就要自己去判断了。
send(sock,"ReceiveCompleted",sizeof(ReceiveCompleted),0);
解决方案2: 接收方作判断!
最好再封装一层协议,把包长度加在包头中,接收方按照包长度来接收数据
解决方案3: 数据被发送后,存储在接收方的socket缓冲区中,直到被接收方读出或清除。
通讯的正确性与发送或接收的次数没有直接关系。
仔细调试你的代码吧!
解决方案4: 连续两次用send发送数据肯定是可以的,
只要发送返回是成功的, 连续多次都没问题。
关键是接收方能否将发送包识别。
因为两次发送的包可以一次收到, 也可能三次才收全。
解决方案5: 中间加一个很小的Sleep试试
以上介绍了“ winsock中连续用两次send会出问题??”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3193623.html