您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> winsock中连续用两次send会出问题??

winsock中连续用两次send会出问题??

来源:网络整理     时间:2016/8/10 17:21:15     关键词:

关于网友提出的“ 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

相关图片

相关文章