tcp是双工发送 和接收 不冲突

解决方案 »

  1.   

    不会造成冲突,socket是全双工的,收和发经过不同的网线,进入网卡不同的硬件缓冲区中,他们是独立工作的,相互不影响。即使针对于send这个单路操作,你应用层也可以多线程发送,协议栈会保证数据的正确性和独立性。
      

  2.   

    多谢,可能无解我的意思了。我知道SOCKET工作是双工的,这个没问题。我的问题是从多线程的角度,如果收发线程同时操作同一个socket对象,是否需同步控制?另外,我的并行收发实现想法有否问题,可行么?
      

  3.   

    嗯,多谢。另外,我的单socket实现并行收发的想法可行么?
    另以免无解我的意思我再强调下:我知道SOCKET工作是双工的,这个没问题。我的问题是从多线程的角度,如果收发线程同时操作同一个socket对象一个send一个recv,是否需同步控制?如果应用层多个线程同时对一个socket执行send操作,那么我想肯定是需要同步控制的。
      

  4.   

    不用同步控制,收发本来就是两个独立的通道,他们没有任何关系,为什么要同步?多线程同时send,也不需要同步,因为协议栈会保证只有一个send能成功,其他的send都会等待(或者返回0),所以你需要判断send的返回值。当然你也可以做同步,对流程也没啥影响,但是即使你做了同步,判断返回值的动作还是省不掉的
      

  5.   

    多个线程同时send 同一个socket的话,会出现问题的,楼上说不需要同步(我不是很能理解)同时操作一个资源不同步怎么行?
      

  6.   

    楼主可以这样做啊,弄一个发送消息队列,n多个线程需要send消息,就push到消息队列。
    用一个发送线程,不断的去发送消息队列里面取消息,取出来就发送出去...