我们学校所有寝室的网络有这样一个特点,1m的网卡,稳定速度在120左右。但是在重新进行网络连接后的5秒到10s内,进行下载,那么下载速度可以冲到2到3m不等。那么不停的断开网络连接和网络重连,则可以很大程度的加快下载速度。我想请大家制作一个可以完全代替手工不停断开网络连接和网络重连的工具。谢谢大大们了!!  
   ps: 如果有可能,最好有一个设置界面,包括一下设置----开始、停止、断开网络连接和网络重连之间的间隔秒数设置。

解决方案 »

  1.   

    1、网络断开再连接,对下载速度有影响?
    可能性猜测:交换机或路由器中的网速限制策略,在刚连接上时策略生效有一个延迟
    2、这个功能一般防火墙都有,只是不一定能做到定时自动断开和连接
    3、抄一段代码,参考一下
    调用了 iphlpapi.dll 中两个API函数const 
      iphlpapilib = 'iphlpapi.dll';
      MAX_INTERFACE_NAME_LEN = 256; // MPRAPI.H
      ANY_SIZE = 1;
      MAXLEN_IFDESCR = 256;
      MAXLEN_PHYSADDR = 8;
      MIB_IF_ADMIN_STATUS_UP = 1;
      MIB_IF_ADMIN_STATUS_DOWN = 2;
      MIB_IF_ADMIN_STATUS_TESTING = 3;
    type 
      _MIB_IFROW = record
        wszName: array[0..MAX_INTERFACE_NAME_LEN - 1] of WCHAR;
        dwIndex: DWORD;
        dwType: DWORD;
        dwMtu: DWORD;
        dwSpeed: DWORD;
        dwPhysAddrLen: DWORD;
        bPhysAddr: array[0..MAXLEN_PHYSADDR - 1] of BYTE;
        dwAdminStatus: DWORD;
        dwOperStatus: DWORD;
        dwLastChange: DWORD;
        dwInOctets: DWORD;
        dwInUcastPkts: DWORD;
        dwInNUcastPkts: DWORD;
        dwInDiscards: DWORD;
        dwInErrors: DWORD;
        dwInUnknownProtos: DWORD;
        dwOutOctets: DWORD;
        dwOutUcastPkts: DWORD;
        dwOutNUcastPkts: DWORD;
        dwOutDiscards: DWORD;
        dwOutErrors: DWORD;
        dwOutQLen: DWORD;
        dwDescrLen: DWORD;
        bDescr: array[0..MAXLEN_IFDESCR - 1] of BYTE;
      end;  MIB_IFROW = _MIB_IFROW;
      _MIB_IFTABLE = record
        dwNumEntries: DWORD;
        table: array[0..ANY_SIZE - 1] of MIB_IFROW;
      end;
      MIB_IFTABLE = _MIB_IFTABLE;
      PMIB_IFTABLE = ^MIB_IFTABLE;function GetIfTable(pIfTable: PMIB_IFTABLE; var pdwSize: ULONG; bOrder: BOOL): DWORD; stdcall;
      external iphlpapilib name 'GetIfTable';
    function SetIfEntry(const pIfRow: MIB_IFROW): DWORD; stdcall;
      external iphlpapilib name 'SetIfEntry';//断开
    procedure TForm1.Button1Click(Sender: TObject);
    var
      dwSize: DWORD;
      mit: PMIB_IFTABLE;
      i: integer;
    begin
      GetIfTable(nil, dwSize, TRUE);
      mit := GetMemory(dwSize);
      if GetIfTable(mit, dwSize, TRUE) = NO_ERROR then
        for i := 0 to Pred(mit^.dwNumEntries) do
        begin
          mit^.table[i].dwAdminStatus := MIB_IF_ADMIN_STATUS_DOWN;
          if SetIfEntry(mit^.table[i]) = NO_ERROR then
            ShowMessage('Stop Adapter(' + IntToStr(mit^.table[i].dwIndex) + ')'
              + pchar(@mit^.table[i].bDescr[0]) + ' succeed.');
        end;
      FreeMemory(mit); 
    end; //连接
    procedure TForm1.Button2Click(Sender: TObject);
    var
      dwSize: DWORD;
      mit: PMIB_IFTABLE;
      i: integer; 
    begin 
      GetIfTable(nil, dwSize, TRUE);
      mit := GetMemory(dwSize);
      if GetIfTable(mit, dwSize, TRUE) = NO_ERROR then
        for i := 0 to Pred(mit^.dwNumEntries) do
        begin
          mit^.table[i].dwAdminStatus := MIB_IF_ADMIN_STATUS_UP;
          if SetIfEntry(mit^.table[i]) = NO_ERROR then
            ShowMessage('Start Adapter(' + IntToStr(mit^.table[i].dwIndex) + ')'
              + pchar(@mit^.table[i].bDescr[0]) + ' succeed.');
       end; 
      FreeMemory(mit); 
    end;