做一个文件传输,电信客户端间的传输速度很好,但是网通跟电信节点连接的时候很慢2k/s,不能动的地步,跟来跟去发现不了问题,(推测很可能是网络丢包率奇高的问题。),无论是TCP或者UDP方式都是这个效果。不过QQ的文件传输等却没有这样的障碍,为何?前提是2点之间是单线程,不能用多线程。前人一定有这个问题,或者好的解决方法或者算法等,请不吝赐教!!!或者有其他建议或者推测,请说说,谢谢!

解决方案 »

  1.   

    网通跟电信节点连接 本来相互就连接卡得要命。
    -----------------------
    话是这么说,但是应该可以解决,很多软件都做的很好,qq他们就能传(不过我想他们是UDP+多线程),但是单线程有问题,肯定是我程序自身的问题。请高手指导!
      

  2.   

    QQ采用的是UDP传输协议,采用p2p传输方式。
      

  3.   


    在双线机房(有电信出口和网通出口)放个服务器。
    让电信的客户端连该服务器的电信IP;
    网通的客户端连该服务器的网通IP;
    该服务器做中转。
    就快了。- 千里孤行
      

  4.   

    网络环境相同的情况下,UDP肯定是要比TCP快的,你自己多测试几次。
      

  5.   

    qq的2点文件传输(应该没有用到P2P中的多点吧),还有的是,如果服务器做中转,如果用户量数据大,那岂不是要很多服务器来负载?估计开销就很大了。
      

  6.   

    QQ的传输不是像你想象的那么简单。
    许多用户是内网IP,是不能直接传输数据的。
    A给B发文件的过程是这样的:
    1.A在界面上操作,给用户B发一个文件
    2.操作被传到QQ服务器上,服务器验证B的状态,并查出B的IP地址
    3.服务器将B的IP地址,端口,状态等信息传给A
    4.A根据服务器传回的信息,如果B状态为不在线等等,就在界面上告知A,并提示发送“离线文件”
    5.A根据服务器的消息,如果B状态为在线,则直接连接B的IP地址,如果B为公网IP,则立刻连上,此时相当于P2P传输,如果A,B在局域网内,由于直接连接的IP,那速度就相当快。如果在公网上则取决于A的上行带宽和B的下行带宽,还有运营商之间的接口带宽。
    6.如果A无法连接B,则A将无法连接的消息传给服务器,服务器给B消息,让B试图反向连接A
    7.如果B连接A成功,则执行5的过程,也是P2P传输
    8.如果A无法连接B,而且B无法连接A,则说明A,B都处于不同的内网内,都没有公网IP,无法直接连接。服务器则开始协调A和B进行打洞,详细过程见"P2P打洞和NAT穿越"
    9.经过第8步,如果打洞成功(取决于A,B所处的网络环境和连接的路由等),则A和B仍然直接传送数据,也是P2P传输。
    10.如果A,B打洞不成功,A和B无论如何也不能直连,也就是不能进行P2P传输,这时需要服务器中转数据。
      

  7.   

    把SOKET的发送和接收buffer设置大些#define MAX_SOCKBUF 65536int buf_size,buf_minsize;
    //udp
    int buf_size = MAX_SOCKBUF, buf_minsize = MAX_SOCKBUF / 2;
    if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0
    && ::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_minsize, sizeof(int)) != 0)
    GetSockErrorMsg("setsockopt(sendbuf)");
    //tcp
    buf_size = MAX_SOCKBUF, buf_minsize = MAX_SOCKBUF / 2;
    if (::setsockopt(udp_sd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(int)) != 0
    && ::setsockopt(udp_sd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_minsize, sizeof(int)) != 0)
    GetSockErrorMsg("setsockopt(recvbuf)");
      

  8.   

    依你的情况断定,QQ是通过中转的。其他算法,可以适当提高传输速度,比如UDX协议。但根本解决南北互通问题,还得通过服务器中转。
      

  9.   

    通过服务器中转?
    那如果是很多用户是南北交互,那岂不是这个服务器要很大流量通过?这样的方案是不是可以否定掉?费用都搞死人。
    还是通过这个服务器,做路由或者控制消息的中转?疑问ing.....
      

  10.   


    要赚钱,先烧钱其实应该没你想想中name严重,你觉得你一个业务出来,会有多少用户?
    如果真由那么多用户,那烧更多钱也值。
    千里孤行
      

  11.   

    别想了
    这个问题我N年前为北京用户调试的时候就遇到过
    当时,无论我自己写的软件,还是QQ或者标准FTP
    传输速度都只有1KB/S
    这个电信和网通之间的物理带宽限制导致的
    软件是无能为力的
    QQ如果能达到高速度
    那么它很可能使用了IP判断,然后借助QQ的服务器进行线路中转和优化除非你能优化你的路由,借助第三方双线路进行传输
    否则无法解决
      

  12.   

    有没有更好的建议,我看有些程序应该也是可以的,中转服务器(应该2点直接tcp连接的ip是另外一个),他们没有这样的情况,从360的tcp查看端口,都是直接2点为ip的
      

  13.   

    这类情况我遇到过, 发了个demo到你邮箱,你看看行不?
      

  14.   

    楼主 给我转个demo 行不 [email protected]