发送文件问题
如下:用strconv把字节数组转换成字符串后发送,接受到后再用strconv转换成数组,可是原来是25.5的文件,接收到只有25.1
发送:
sdata = StrConv(data(), vbUnicode)
Winsock2.SendData sdata
接收:
Winsock2.GetData sdata
data() = StrConv(sdata, vbFromUnicode)如果是直接发送字节数组的话(如下),能接收完整,是转换过程中数据丢失了吗???
winsock2.senddata data
winsock2.getdata data

解决方案 »

  1.   

    是你的用法有问题,你的25.5是如何转换为Byte数组的?
      

  2.   

    发送代码:
    Private Sub Command2_Click()
    StatusBar1.SimpleText = "向客户端发送数据..."
    Open filepath For Binary As #1
    ReDim data(filelength)
    For j = 1 To filelength
    Get #1, j, data(j)   '读入文件
    If (Int((j / filelength) * 100) Mod 10) = 0 Then ProgressBar1(0).Value = Int((j / filelength) * 100)
    Next
    send = filelength
    sdata = StrConv(data, vbUnicode)
    Winsock2.SendData sdata
    Close #1接受代码:
    StatusBar2.SimpleText = "正在接收数据..."
    If flag = True Then
    Winsock2.GetData filename, vbString, bytesTotal - 4
    Winsock2.GetData filelength, vbLong
    fname(1).Caption = filename
    If filelength > G Then
       Label3(1).Caption = Round(filelength / G, 2) & "G"
    ElseIf filelength > M Then
           Label3(1).Caption = Round(filelength / M, 2) & "M"
        ElseIf filelength > K Then
               Label3(1).Caption = Round(filelength / K, 2) & "K"
            Else
               Label3(1).Caption = filelength & "B"
    End If
    '建立文件
    Open filename For Binary As #1
    flag = False
    Else
    '设置缓冲区
    ReDim data(bytesTotal)
    '接收数据并写入文件
    Winsock2.GetData sdata
    data() = StrConv(sdata, vbFromUnicode)
    For j = received + 1 To received + bytesTotal
    Put #1, j, data(j - received - 1)
    Next
    '更新接收到的数据
    received = received + bytesTotal
    ProgressBar1(1).Value = Int((received / filelength) * 100)
    If ProgressBar1(1).Value >= 100 Then Close #1
       StatusBar2.SimpleText = "完成接受!"
      

  3.   

    发送代码:
    Private Sub Command2_Click()
    StatusBar1.SimpleText = "向客户端发送数据..."
    Open filepath For Binary As #1
    ReDim data(filelength)
    For j = 1 To filelength
    Get #1, j, data(j)   '读入文件
    If (Int((j / filelength) * 100) Mod 10) = 0 Then ProgressBar1(0).Value = Int((j / filelength) * 100)
    Next
    send = filelength
    sdata = StrConv(data, vbUnicode)
    Winsock2.SendData sdata
    Close #1接受代码:
    StatusBar2.SimpleText = "正在接收数据..."
    If flag = True Then
    Winsock2.GetData filename, vbString, bytesTotal - 4
    Winsock2.GetData filelength, vbLong
    fname(1).Caption = filename
    If filelength > G Then
       Label3(1).Caption = Round(filelength / G, 2) & "G"
    ElseIf filelength > M Then
           Label3(1).Caption = Round(filelength / M, 2) & "M"
        ElseIf filelength > K Then
               Label3(1).Caption = Round(filelength / K, 2) & "K"
            Else
               Label3(1).Caption = filelength & "B"
    End If
    '建立文件
    Open filename For Binary As #1
    flag = False
    Else
    '设置缓冲区
    ReDim data(bytesTotal)
    '接收数据并写入文件
    Winsock2.GetData sdata
    data() = StrConv(sdata, vbFromUnicode)
    For j = received + 1 To received + bytesTotal
    Put #1, j, data(j - received - 1)
    Next
    '更新接收到的数据
    received = received + bytesTotal
    ProgressBar1(1).Value = Int((received / filelength) * 100)
    If ProgressBar1(1).Value >= 100 Then Close #1
       StatusBar2.SimpleText = "完成接受!"