我把要发送的内容用textstream.writeline()写到文本文件里,首先用LOF()得到文件大小,通过WINSOCK把这个大小(字节)发出去,然后再从这个文本文件每次读4K用WINSOCK分段发出去。对方要对比收到的文件大小和之后收到的信息长度,如果一样就OK。现在对方总说收到的不一样,为何?
是我的计算方式不对吗?

解决方案 »

  1.   

    谢谢楼上回复,不过能详细点吗?
    LOF()得到的不就是BYTE 吗?
      

  2.   

    那我也不大清楚了,以前看过一个传送文件的程序,传送过去客户端后,多了些文件头什么的,需要去除那一部分才能写成合法的exe,呵呵,你找找相关的资料吧,应该这网站上有的。祝你早日完成。
      

  3.   

    textstream.writeline()写到文本文件里。
    Open CheckFileDir For Binary As #hffsize = LOF(hf)
    tcpServer(Index).SendData bbuf  'Dim bbuf() As Byte  
    这样得到的fsize和对方收到的信息的字节数不符吗
      

  4.   

    我自个再顶一下,老大们,帮一下吧,现在对方说每收到256个字节后就出现乱码。
    以下是我代码:
    Const bufsize = 4096
    'Const bufsize = 1024
    Dim bbuf() As Byte
    Dim hf As Integer
    Dim fsize As Long
    Dim bufEnd As Long
    ReDim bbuf(0 To bufsize - 1)
    hf = FreeFile()
    Open CheckFileDir For Binary As #hf '是要发送的文件fsize = LOF(hf)
    Do While (Seek(hf) - 1) + bufsize <= fsize
        Get #hf, , bbuf
        tcpServer(Index).SendData bbuf
        ContinueSend = True
    Loop
    bufEnd = fsize - (Seek(hf) - 1)
    If bufEnd > 0 Then
        ReDim bbuf(bufEnd)
        Get #hf, , bbuf
        tcpServer(Index).SendData bbuf
    End If
    Close #hf在啥问题呢?俺用VB做了一客户端接收一切OK。晕了!
      

  5.   

    分段发送文本文件,遇中文字符,最容易出现这种问题,解决方案有多种,我建议用纯字节方案发送与接收。
    发送方,发送的是从文件中读出的Byte数组,接收方也必须用Byte数组接收,并按实际字节数写入文件。
    你的方法,有可能是一个中文字符被分在前后两个包中,而产生了乱码,也可能是一个包因网络环境造成分割,而产生多次DataArrival事件。所以写入时,记住一定要按bytesTotal的实际字节数确认写入的字节数与在文件中的偏移量。