1、程序在网络环境复杂,距离远的情况下有丢包,数据不能到达的情况,到底程序如何控制才能避免发生这个呢??2、我开启多线程下载,cpu立刻站满,速度也爆快,我不希望这样啊,我希望能不影响其它操作,而速度也没必要那么快,程序中应如何控制带宽和cpu使用率阿?这两个实在没思路

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【bloodrate】截止到2008-07-25 00:36:48的历史汇总数据(不包括此帖):
    发帖的总数量:109                      发帖的总分数:1850                     每贴平均分数:16                       
    回帖的总数量:193                      得分贴总数量:49                       回帖的得分率:25%                      
    结贴的总数量:105                      结贴的总分数:1500                     
    无满意结贴数:60                       无满意结贴分:1750                     
    未结的帖子数:4                        未结的总分数:350                      
    结贴的百分比:96.33 %               结分的百分比:81.08 %                  
    无满意结贴率:57.14 %               无满意结分率:116.67%                  
    值得尊敬
      

  2.   

    1、tcp连接还会丢包的话,那你可以多次重发,或者用阻塞机制
    2、多线程下载,你不要在主线程建立连接。每个线程也可以用sleep来交出cpu
      

  3.   


    1. Socket 是建立在 TCP/IP 协议上的,TCP 协议(Socket)会自动处理数据包丢失的情况,即当出现数据包丢失时接收方会自动给发送方返回要求重发丢失的数据包的信息。
    2. 一般可通过调整同时开启的线程数量粗略地控制带宽和 CPU 的使用率,更精细的控制就要在 I/O 流上作控制了。
      

  4.   


    同意楼上的,另外如果你觉得CPU被占用太多机器变慢了的话,应该是你的线程开得太多,建议你考虑使用线程池技术
      

  5.   

    第二个问题再进一步,比如最简单的通信 客户端 socket.getOutputStream().write()...  服务器 serverSocket.accept().read().... 这是java代码最底层的通讯代码了,那么假如说我的网卡带宽是100MB,线路带宽是256k,那么用这两句传输数据是不是默认用满带宽传输,就是100MB与256KB之间较小的256KB传输,如果想控制在100KB以下怎么做?