一个服务程序,开了两个线程,对一个连接进行写操作(客户端登陆,服务器下发一些数据),其中一个线程要下发的数据比较大(线程1),大概几M,另一个线程大概隔段时间采集到一些数据(线程2),也要发给客户端问题出来了,客户端接收的时候,线程1发的数据只是一个大包,结果发现这个数据包里夹着线程2的数据,我设置的发送方式是阻塞的,应该是先写一个数据包,接收完一个之后,才能收第二个,为什么会混在一起呢?
期待高手回答

解决方案 »

  1.   

    最好设置一下同步,等待一个写完了以后,另一个再开始。你设置的虽然是阻塞模式,但是有多个线程,他们确实并行的,所以,你可以定义一个CEvent对象来同步多个线程。
      

  2.   

    就算是多线程,应该也有先后的,对吧?
    比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊?确实可以设置同步,但是应该不用同步就能解决啊
      

  3.   

    --------
    就算是多线程,应该也有先后的,对吧? 
    比如我线程1先开始的,那么在它没有写完之前,线程2应该是排队的呀,而且TCP自动分包组包,虽然线程1的包比较大,那也不能在中间插入别的包啊? 确实可以设置同步,但是应该不用同步就能解决啊
    ---------确实线程1开始send的时候,貌似线程2是排队的, 但是像线程1send的数据大的话
    我通常会在一个循环里send,直到全部数据发完,只调用一下send,然后给一个好大数字的len参数感觉不踏实。
    如果循环里send确实是调用了几次
    这个时候倒是有可能线程2 插会进来。
    ^_!居然是你客户端的问题