VB中的网络编程相关问题

转载自论坛:https://bbs.csdn.net/topics/330232352

  用winsock写了一个ftp上传下载的程序,但是今天下载一个53726长度的txt文件时,发现怎么弄下载的文件都只有8192长度。查资料得知要用peekdata方法,调试了很久发现应该如此,但是peekdata我用不对,虽然下载的文件突破了8192,但是依然下载不完全,经常会有些奇奇怪怪的结果。

 1 Private Sub wscData_DataArrival(ByVal bytesTotal As Long)
 2     Dim ByteData() As Byte
 3     dblDataCom = dblDataCom + 8192
 4 
 5     If dblDataCom > Val(strFileSize) Then
 6         wscData.PeekData ByteData(), vbByte      
 7      Open strFileLocal For Binary Lock Write As #1       
 8         Put #1, , ByteData()
 9         Close #1
10         wscData.Close
11     End If
12 end sub

PeekData 方法:

  PeekData 不从输入队列删除数据,除了这一点之外,方法与 GetData 相似。该方法仅适用于 TCP 连接。
语法:

  object.PeekData data, [type,] [maxLen]
PeekData 方法的语法包含下面部分:
  部分 描述 
  object 对象表达式,其值是“应用于”列表中的对象。 
  data 在方法成功地返回之后存储获取的数据。如果对于没有足够的适于所请求的类型来说没有足够可用的数据,那么 data 将被设置为 Empty。 
  type 可选的。所获取的数据类型,如同“设置值”中所述。缺省值为:vbArray + vbByte。 
  maxLen 可选的。在收到字节数组或字符串时,长度指定了所需要的大小。如果对字节数组或字符串的参数丢失,则将获取所有可用的数据。如果提供的数据类型不是字节数组和字符串的话,则忽略该参数。

 1 'type 的设置值是:
 2 
 3 '类型         '常数 
 4 Byte         vbByte 
 5 Integer      vbInteger 
 6 Long         vbLong 
 7 Single       vbSingle 
 8 Double       vbDouble 
 9 Currency     vbCurrency 
10 Date         vbDate 
11 Boolean      vbBoolean 
12 SCODE        vbError 
13 String       vbString 
14 Byte Array   vbArray + vbByte         

  如果所指定的类型为 vbString,则在返回到用户之前,字符串数据将转化成 UNICODE。

 参考列表:

1. Winsock属性方法介绍

2. 清空缓冲区和不清空缓冲区的区别GetData/PeekData。

3. VB6.0中WinSock控件属性和方法详解。

4. socket通信中如何区分前后两次的数据。

posted @ 2019-08-30 23:24  傍风无意  阅读(216)  评论(0)    收藏  举报