已经实现了用Winsock的TCP协议传送文件,但即便在局域网内传送速度也很慢,不知有何办法?(注:不用UDP协议)

解决方案 »

  1.   

    你是怎么传送文件的?一次发送一个字节?还有VB中String存在Unicode自动转换问题,经常会因这个问题影响效率,最好使用Byte数组
      

  2.   

    zyl910(910:分儿,我又来了!) :
       每次传送4KB。部分代码如下:发送文件端:
    dim bytedata() as byte
    if ...  then    '不是文件的最后一块
      ....  '读文件部分
      redim bytedata(1 to 4096)
      winsock1.senddata bytedata()
    else
      ....  '读文件部分
      redim bytedata(1 to leftover)
      winsock1.senddata bytedata()
    end if接收文件端:
    private sub Winsock1_DataArrivel(bytestotal as long)
      dim bytedata() as byte
      redim bytedata(1 to bytestotal)
      winsock1.getdata bytedata(),vbArray+vbByte
      ...
    end sub
      

  3.   

    先将文件读入内存再发有可能快一些。有可能是网络架构本身的问题,直接让Windows在局域网上复制文件速度有多快?TCP比UDP多了一些流量控制安全检查之类的数据包,所以效率稍微低点,两者是同一数量级。
      

  4.   

    zyl910(910:分儿,我又来了!) :
        因为传送的文件有的较大,可能上G,所以首先将文件读入内存有点担心.
    另外,软件测试所在网络环境是一个100M交换机和两台电脑(100M网卡).
      

  5.   

    昏,好像无可能出问题100M交换机理论上能达到每秒12.5MB的速度(100M是指100兆位)
    你试试Windows在局域网上复制文件速度有多快
      

  6.   

    VB 用winsock发送数据当然慢你还了解winsock控件的机制?它内部有个缓冲区你send的时候只是写入它的缓冲区  而没有发送出去它内部有响应事件   当发现有数据的 触发这个时间 对外发送
     
    所以每次winsock.senddata  后都要写一个doevents  不然发不出去要想快 直接使用API
      

  7.   

    究竟多慢?我的最快曾经达到6M/S,一般2-3M/S。楼上的夏,不要误导。
      

  8.   

    是否每次都进行socket连接。如果是,肯定会慢,连接和断开速度比较慢。
    应改一次socket连接后,多次进行发送,这样会快不少。
      

  9.   

    硬件环境:一个100M交换机和两台电脑(P4+256MB+100M网卡).
    今天我重新找了个环境,出现了更牛的事:两台机子是WinXP Pro+sp1+VB6+Vs6sp6,能够正常传送文件,只是速度较慢。如果在两台Win2000 Pro+Sp4+VB6+Vs6sp6计算机上,能传送文件的一半,不成功。如果一台是WinXp,一台是Win2000就直接不成功。(注:以上都没有加载网络防火墙)
        百思不得其解?
      

  10.   

    上面两帖的问题已解决,原因是我使用两个WinSock控件分别传送命令和数据,其中有一个Winsock控件少写一个ConnectionRequest事件。
        但传送文件的速度仍然很较慢!!!!!