Private  Sub  winsock1_Connect()  
       Dim  strCommand  As  String  
       On  Error  Resume  Next  
 
       If  Not  Unix  Then  
               strCommand  =  "GET  "  +  URL  +  "  HTTP/1.0"  +  vbCrLf    
       Else  
               strCommand  =  "GET  "  +  "/"  +  Filename  +  "  HTTP/1.0"  +  vbCrLf    
       End  If  
 
       strCommand  =  strCommand  +  vbCrLf  
       Winsock1.SendData  strCommand            
         
End  Sub  
 
Private  Sub  winsock1_DataArrival(ByVal  bytesTotal  As  Long)  
       Dim  bytData()  As  Byte  
       ReDim  bytData(bytesTotal)  
       Dim  DATA  As  String  
       Dim  tmpData()  As  Byte  '保存第一次发送来的数据去掉头部信息后的数据  
         
       Winsock1.GetData  bytData  
       DATA  =  StrConv(bytData,  vbUnicode)  
       If  InStr(DATA,  "Content-Type:")  Then  
 
               If  RESUMEFILE  =  True  Then  
                       If  InStr(DATA,  "HTTP/1.1  206  Partial  Content")  =  0  Then  
                       MsgBox  "运行时错误.",  vbCritical,  "运行时错误"  
                       Exit  Sub  
                       Reset  
                       CloseSocket  
                       End  If  
               End  If  
 
               If  InStr(DATA,  "404  Not  Found")  >  0  Then  
               If  Not  Unix  Then  
                       Unix  =  True  
                       Reset  
                       CloseSocket  
                       Winsock1.Connect  strSvrURL,  80  
                       Exit  Sub  
               End  If  
               'Unix  =  False  
               Unix  =  True  
               MsgBox  "没有找到此文件.",  vbCritical,  "文件未找到"  
               Reset  
               CloseSocket  
               Exit  Sub  
               End  If  
 
               Dim  Pos%,  LENGTH%,  HEAD$  
               Pos  =  InStr(DATA,  vbCrLf  &  vbCrLf)  
               LENGTH  =  Len(DATA)  
               HEAD  =  Left(DATA,  Pos  -  1)  
               Header  =  Header  &  HEAD  
               DATA  =  Right(DATA,  LENGTH  -  Pos  -  3)  
               '得到当前文件大小  
               bytesRemaining  =  GETDATAHEAD(Header,  "Content-Length:")  
                   
               tmpData  =  StrConv(DATA,  vbFromUnicode)  '字符串转为二进制      
 
               '第一次写文件(去掉头后的数据写入指定文件中)  
               Open  FilePathName  For  Binary  As  #1  
               Put  #1,  BytesAlreadySent+1,  tmpData()                    
               BytesAlreadySent  =  Seek(1)  
               Close  #1  
               Exit  Sub  
       End  If  
 
       Open  FilePathName  For  Binary  As  #1        
       Put  #1,  BytesAlreadySent+1,  bytData    
       BytesAlreadySent  =  Seek(1)  
       Close  #1  
 
 
End  Sub  
 
这是小弟用winsock写的一个文件接收程序,但一直有问题:就是接收到的文件一直比实际文件大,一直找不到问题的方法与答案...请各位指教.

解决方案 »

  1.   

    Inet比原来大正常的,winsock?不知道
      

  2.   

    是的,用winsock(sp5),我的这段代码有没有问题呢?请指教
      

  3.   

    那是因为你进行了unicode转换,破坏了原有数据详细看这个吧
    http://expert.csdn.net/Expert/topic/2907/2907058.xml?temp=2.712649E-02
      

  4.   

    楼主可以查看本版FAQ。
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=155909
      

  5.   

    主要是以下两个语句出了问题:DATA  =  StrConv(bytData,  vbUnicode)tmpData  =  StrConv(DATA,  vbFromUnicode)  '字符串转为二进制      
    对于二进制串,你最好用纯BYE数组进行分析和截取,你可能会用到CopyMemory这数据进行操作。