我是一个VB新手
现用winsock控件编写一个传输图片的客户端
图片大小在50K-100之间
转成BABY格式后发送
自己做了个服务器端,结果报文报太大,无法传送
现在想到用文件分段来实现传送,但是接收端需要更改
由于服务端是远程的,再我不改变远程服务端的情况下,能不能一次把图片都发过去
有什么方法能一次性发送大文件,100K左右对方接收方法未知,只给我一个端口,一个协议,按照这个协议传送

解决方案 »

  1.   

    以下是程序代码
    ***********************************************************************
    '发送端
    Sub SendFile(FileName As String, Wnk As Winsock)
    'FileName 预发送的文件.
    Static iPoss As Double '当前发送位置
    Dim SendData() As Byte '二进制数据
    Dim Length As Double '记录文件长度
    Dim FileNum As Integer
    FileNum = FreeFile '获得文件号
    Length = FileLen(FileName) '获得文件长度
    Open FileName For Binary As FileNum
    DoEvents
    If Length <= Max Then
    ReDim SendData(1 To Length)
    Get FileNum, , SendData
    Wnk.SendData SendData
    Else
    While iPos <= Length - Max
    ReDim SendData(1 To Max)
    Get FileNum, iPos + 1, SendData
    Wnk.SendData SendData
    iPos = iPos + Max
    Wend
    End If
    ReDim SendData(Length - iPos - 1) '此处注意要-1,否则不会成功!
    Get FileNum, iPos + 1, SendData
    Wnk.SendData SendData
    Close FileNum
    Debug.Print FileLen(FileName)
    End Sub
    *******************************************************************
    '接收端
      Private Sub udpPeerB_DataArrival(ByVal bytesTotal As Long)
      ReceiveData "d:\x.jpg", udpPeerB, bytesTotal
      End Sub
        
    Sub ReceiveData(FileName As String, Wnk As Winsock, Lens As Long) '接收数据
    'FileName 文件保存的位置
    Dim RecData() As Byte
    Dim Length As Double
    Dim FileNum As Integer
    FileNum = FreeFile
    Open FileName For Binary As FileNum
    Length = FileLen(FileName)
    ReDim RecData(1 To Lens)
    Wnk.GetData RecData
    Put FileNum, Length + 1, RecData
    Close FileNum
    End Sub
    *******************************************************************
    这段程序出了点问题
    只能传送大概5分之一的内容
    接收那块只能收到8192 之后就不接收了
    问题出在哪?
      

  2.   

    需要在接收的时候启动一个Timer,来判断是否接收完毕可以在Wnk的数据到达事件中启动该TimerWnk每次接收的数据好象还有大小限制