小弟做了客户端和服务器的程序,是基于winsock的,下面是代码:
客户端:
Private Sub Command1_Click()
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 3000
Winsock1.ConnectEnd Sub
Private Sub Command5_Click()
Open "c:\test.rtf" For Binary As #1
Put #1, 1, RichTextBox1.TextRTF
Close #1
Dim a() As Byte
Open "c:\test1.rtf" For Binary As #1
ReDim a(1 To LOF(1))
Get #1, , a
Close #1
Winsock1.SendData a
End Sub服务器端程序:Private Sub Form_Load()
Winsock1.LocalPort = 3000
Winsock1.Listen
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a() As Byte
ReDim a(1 To bytesTotal)Winsock1.GetData a
Open "c:\b.rtf" For Binary As #1
Put #1, 1, a
Close #1
End Sub
现在问题是这个样子的:如果客户端发送的是字符串,在服务端的接收到数据后文件"c:\b.rtf"里面可以看到是正常是文件;如果富文本框RichTextBox1里面包含了图片后,当发送的时候同时保存了该文件的一个副本"c:\test1.rtf",文件和test.rtf一样没区别,但是在服务前端接收的文件"c:\b.rtf"里面显示的很多数字。另外如果发送doc,xls等文件,如果里面含有图片的话,在接收端也显示不出正确的格式来。我该怎么获取原始文件,或者怎么接收使得"c:\b.rtf"文件和原始文件一样。请高手帮忙!!

解决方案 »

  1.   

    现在自己知道问题出来哪了,在服务端接收数据的代码应该改成这个样子
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
    Dim a() As Byte 
    ReDim a(1 To bytesTotal) Winsock1.GetData a 
    Open "c:\b.rtf" For Binary As #1 
    if lof(1)=0 then'''加上
    Put #1, 1, a 
    else'''加上
    Put #1, lof(1)+1, a '''加上
    end if'''加上
    Close #1 
    End Sub 现在能保存文件了,但是又出了个新的问题,就是如果发送2次数据,接收端的接收到数据后按照上面的程序是要追加到原来的文件后面的,但是实际中,文件的长度确实是增加了,变成了原来的2倍,但是,当打开文件后,文件的内容却没有变化,不知道是怎么回事情,这部分数据到底隐藏到哪了。然而如果在用二进制打开c:\b.rtf这个文件,然后在写到一个c:\bb.rtf文件里面去,显示的内容和c:\test.rtf一样,单是所占的字节数和c:\b.rtf一样。不知道这是怎么回事情,高手帮忙呀!!
      

  2.   

    这个问题对于文本文件没有区别,发送次数多了,自动在后面追加数据,难道doc,xls文件用其他的操作吗?高手请帮忙呀!