软件注册站
热情软件屋

 
用Winsock控件发送文件,可是文本文件则不全
编号: QA004197    
建立日期: 2001年5月13日 最后修改日期: 2004年1月1日
所属类别: Visual Basic - Internet编程
   
    我参照一份资料编了一个用Winsock控件发送文件的程序,可是有一点问题:(关于文件读取后再写入文件这个问题我上次已经问过了所以程序也改了)就是如果是文本文件则不全,如果是程序则打不开,我发现接收的数组和发送的不一样,该怎么办,程序如下:
    客户端:
    Private Sub Form_Load()
    Winsock1.LocalPort = 1001
    Winsock1.Listen
    End Sub
    Dim a() As Byte
    Private Sub Command1_Click()
    Winsock1.Connect
    End Sub
    Private Sub Command2_Click()
    Winsock1.SendData a
    End Sub
    Private Sub Form_Load()
    Form2.Show
    Winsock1.RemoteHost = "C3Y0V3"
    Winsock1.RemotePort = 1001
    Open "d:\B.DAT" For Binary As #1
    I = 0
    Do While Not EOF(1)
    I = I + 1
    ReDim Preserve a(1 To I)
    Get #1, , a(I)
    Loop
    Reset
    Debug.Print I
    End Sub
    
    
    
    服务器端:
    如何才能接收全呢???
    Private Sub Form_Load()
    Winsock1.LocalPort = 1001
    Winsock1.Listen
    End Sub
    
    
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    If Winsock1.State <> sckClosed Then Winsock1.Close
    Winsock1.Accept requestID
    End Sub
    
    
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim B() As Byte
    ReDim Preserve B(1 To bytesTotal)
    Open "C:\WINDOWS\DESKTOP\C.DAT" For Binary As #2
    Winsock1.GetData B, vbByte + vbArray
    For I = 1 To bytesTotal - 1 '
    Put #2, , B(I)
    Next
    Reset
    End Sub
    
(zttjhm)
   
    因为每次接收的最大字节数为:8192字节。 所以小于8192字节的文件传送与接收没有问题。如果要传送大于8192字节的文件,只好分几次传送与接收了!
    主持人注:这里是唐学文推荐的文件传输程序:f_193.zip
    
    曲以鹏的意见:
    Winsock控件的确每次只能传送8kb的数据,但是在接收方的却也收到了发送方的所有数据,你接收数据不全的原因是你每次接收新数据是会把上次的数据冲掉。解决的方法是你在接收方用一个全局的长整形数作计数器,每次接收数据时(即发生Data Arrival时间时)把这个计数器增一,并用这个计数器作文件指针,来写随机文件,这样就能传输任意大小的文件了,而且还能创送非文本的任意文件。
    
    吴腾华的意见:
    WinSock控件接受数据有两种方式,即Winsock.GetData和Winsock.PeekData,当传送的数据大于8192字节时,要采用Winsock.PeekData <string>,vbByte + vbArray +i
    
(i为传送的字节数),i 可以通过计算文本文件的长度取得,通过来回传送的方法,先送i值,再送文件。

    

此问题由刘玉军回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, Internet编程, INET, www, internet, ie

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio