关于多线程读写一个SOCKET问题

newplayer1 2007-11-24 02:33:22
一个服务程序,开了两个线程,对一个连接进行写操作(客户端登陆,服务器下发一些数据),其中一个线程要下发的数据比较大(线程1),大概几M,另一个线程大概隔段时间采集到一些数据(线程2),也要发给客户端

问题出来了,客户端接收的时候,线程1发的数据只是一个大包,结果发现这个数据包里夹着线程2的数据,我设置的发送方式是阻塞的,应该是先写一个数据包,接收完一个之后,才能收第二个,为什么会混在一起呢?
期待高手回答
...全文
437 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Torch009 2007-12-05
  • 打赏
  • 举报
回复
I 服了 U
cnlzx 2007-12-01
  • 打赏
  • 举报
回复
--------
就算是多线程,应该也有先后的,对吧?
比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊?

确实可以设置同步,但是应该不用同步就能解决啊
---------

确实线程1开始send的时候,貌似线程2是排队的, 但是像线程1send的数据大的话
我通常会在一个循环里send,直到全部数据发完,只调用一下send,然后给一个好大数字的len参数感觉不踏实。
如果循环里send确实是调用了几次
这个时候倒是有可能线程2 插会进来。


^_!居然是你客户端的问题
ppcat_001 2007-11-30
  • 打赏
  • 举报
回复
恭喜接分~
captain_x 2007-11-30
  • 打赏
  • 举报
回复
jf
Torch009 2007-11-30
  • 打赏
  • 举报
回复
我来接分了。
jjfwenwenti 2007-11-26
  • 打赏
  • 举报
回复
恭喜接分~
newplayer1 2007-11-24
  • 打赏
  • 举报
回复
闹了半天是客户端程序的问题,事实证明我说的是对的,分怎么给啊,你们都没说对
newplayer1 2007-11-24
  • 打赏
  • 举报
回复
就算是多线程,应该也有先后的,对吧?
比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊?

确实可以设置同步,但是应该不用同步就能解决啊
qeq2008 2007-11-24
  • 打赏
  • 举报
回复
接收线程没有控制好,
shager 2007-11-24
  • 打赏
  • 举报
回复
最好设置一下同步,等待一个写完了以后,另一个再开始。你设置的虽然是阻塞模式,但是有多个线程,他们确实并行的,所以,你可以定义一个CEvent对象来同步多个线程。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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