就像飞鸽传书那样传,多线程传时是不是要生成N个socket,每个socket负责一块???
另外接收端N个线程一直在recv,只要有包过来就收,怎么区分是哪一块的socket传过来的。
还有,会不会产生丢包,用UDP好还是TCP好?谢了!

解决方案 »

  1.   

    http://dev.csdn.net/develop/article/26/26171.shtm
      

  2.   

    服务器的负载有效,对一一个socket连接来说就有一定的速度,这个是相对的,多线程下载应该是有多个socket同时连到服务器上,这样就对服务器产生了为多个客户服务的假象,从而提高了速度。所以应该用多个socket往服务器上连(个人理解!)
      

  3.   

    多个往服务器上联,那服务器用几个socket发送啊?
      

  4.   

    服务器当然也是多个Socket发送了,你每连一个socket到服务器,服务器就会给你连上的socket开辟一块缓冲区,各个socket的通讯都是独立的.当然一个socket上可以有多个连接.每个连接的缓冲区也是独立的.
      

  5.   

    楼上说的是TCP的吧。UDP的用一个socket不行吧,另外如果用一个socket,缓冲区是独立的,但每个时刻都是那一个socket在传,其它线程在等着,不是相当于单线程吗?还有如果用多个socket,接收端各线程用recvfrom接收时怎么区别当前所接收的包是属于哪一块文件,莫非每一块前面都要加个标记???
      

  6.   

    继续等哦,谁解决了,我把剩下的分全给了。现在主要是几个socket和recvfrom怎么区别的问题???别外用TCP和UDP哪个好一些。
      

  7.   

    傳文件,TCP比UDP易用,如果你有能力自己管理好UDP的丟包和失序,那在丟包不嚴重的情況下,UDP的速度一定比TCP快。如果你使用多個SOCKET來分塊發送,那可以一:使用重疊I/O,只要一個綫程就可以管理多個SOCKET;二:使用多綫程,每個綫程一個SOCKET。至於怎麽區分,每一個地址端口對確定了唯一的一個連接,就不用區別了吧?倒是如果用UDP來傳的話,肯定是要給每個包加個序號的,UDP可以在某些TCP連接不好建立的情況下實現通訊,比如説兩個内網裏的主機互傳文件
      

  8.   

    是共用1个socket,同意fwoielkjrweierwerew说的,一个soket上可以有多个连接
      

  9.   

    楼上说的是用TCP吧。如果用UDP发送端用一个socket应该不行吧,无论哪个线程发送都要调用这个socket,那就不等于单线程吗。如果如果用多个socket又该怎么bind呢?莫非用几个端口,然后接收端也用不同的端口接收?
      

  10.   

    你想加快速度,当然需要使用多个连接
    一个连接的话,因为UDP是发送后不管,一个包太大,就可能丢弃,
    需要频繁的校验动作,使用多线程单连接,
    你必须通同步,等于一个时间只能有一个线程执行====单线程
    而使用多SOCKET,就可以避免这个同步问题,发挥最大效率
    不过一般传输文件不使用UDP,除非在内网