SOCKET编程中的客户端实时接收服务器消息问题

qq_41075572 2017-11-16 11:03:26
SOCKET编程实现即时通讯
客户端需要即时接收服务器消息
我在客户端开启了一个子线程
用于监听来自服务器的消息
在客户端使用beginthreadex开启子线程

然而总是接收不全服务器的消息
本意是服务器返回在线列表
以OnlineFinish为结束符
客户端接收情况如图

而从服务器可见send了两个字符串
一个是Mars一个是OnlineFinish

求一个解决方法 让客户端实现即时监听的功能
...全文
2913 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40894267 2019-05-07
  • 打赏
  • 举报
回复
引用 7 楼 qq_41075572的回复:
问题解决了 监听线程是没问题的 问题在于服务器消息的发送 当时另外开启了一个线程用于发送消息,这可能导致了和主线程不同步,从而导致消息的收发不及时,出现消息丢失的情况
楼主什么意思 能不能详细说说 我现在也碰到了这种情况
qq_41075572 2017-11-20
  • 打赏
  • 举报
回复
问题解决了 监听线程是没问题的 问题在于服务器消息的发送 当时另外开启了一个线程用于发送消息,这可能导致了和主线程不同步,从而导致消息的收发不及时,出现消息丢失的情况
赵4老师 2017-11-16
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545 不行就换UDP
kuangbao9 2017-11-16
  • 打赏
  • 举报
回复
可不可以使用异步通信的方式,我记得里面应该有个消息响应函数,用switch....case来接受客户端或者服务器发来的消息
qq_41075572 2017-11-16
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545 不行就换UDP
recv函数:通过已经连接的SOCKET接收数据。当读到的数据字节少于规定接受的数目(len)时,就把数据全部接收,并返回实际接收到的字节数;当读到的数据多于规定的值时,在流方式下剩余的数据由下个recv读出,在数据报方式下多余的数据被丢弃。 BUFLEN=255 发送的两个字符串总共都没有大于BUFLEN 若全部接受 则肯定会输出连着的两个字符串 若超出了BUFLEN 则应由下一次的recv接收 在这里就是由线程里的下一次recv接收了 只有这个线程读取的情况下 为什么会出现第一个字符串接收不到的情况? 你说的情况我没有理解 链接我也看了 这里设置每次recv的最大长度为255我觉得不会出现链接里所说的情况啊
自信男孩 2017-11-16
  • 打赏
  • 举报
回复
除了这个线程用于接收server的data,其他的地方有没有接收接口? 如果只有这个接口接收,那么所有发过来的都应该能收到
qq_41075572 2017-11-16
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
接收不全是什么意思?只接收一条,第二条没收到?
大多数情况收到第二条收不到第一条 偶尔会收到第一条收不到第二条
自信男孩 2017-11-16
  • 打赏
  • 举报
回复
接收不全是什么意思?只接收一条,第二条没收到?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧