写了个WINSOCK传送文件的程序 主要代码如下发送端Dim exe() As Byte
Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1
Winsock2.SendData exe接受端Dim bxb() As Byte
Winsock1.GetData bxb
Open "d:\2.exe" For Binary As #2
Put #2, , bxb
Close #2
Text2.Text = bxb
传送8K以下文件没问题 可是 8K以上 为什么传送过去就只有8K呢
Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1
Winsock2.SendData exe接受端Dim bxb() As Byte
Winsock1.GetData bxb
Open "d:\2.exe" For Binary As #2
Put #2, , bxb
Close #2
Text2.Text = bxb
传送8K以下文件没问题 可是 8K以上 为什么传送过去就只有8K呢
比如Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1现在把二进制数据读到exe数组中间了
怎么实现1次发8K?
我知道 如果这样发送Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1
for a=0 to ubound(exe)-1
Winsock2.SendData exe
doevents
next对方写Dim bxb() As Byte
Winsock1.GetData bxb
Open "d:\2.exe" For Binary As #2
Put #2, , bxb
Close #2
Text2.Text = bxb这样每次发数组中的一个数据 对方是可以接受的
但是这样1个1M文件起码发半天
谁帮忙优化下
Open "d:\1.exe" For Binary As #1
ReDim exe(LOF(1)) As Byte
Get #1, , exe
Close #1 '读出数据后不要急于发送,在结尾添加一个标志,供客户端判断是否完整的接收到了数据。比如:
Dim arrLength As Long
arrLength = UBound(exe)
'添加结束标志
dim FinisData() as byte
FinisData = "`!"
ReDim Preserve arrData(arrLength + 4)
CopyMemory exe(arrLength + 1), FinisData(0), 4
'向客户端发送数据
Winsock1(Index).SendData exe
DoEvents
'接收端
Dim bxb() As Byte
Dim Finis As String, FinisData(3) As Byte '结尾标志
Static mData() As Byte '完整的数据
Static mLength As Long
Static iCount As Integer
'接收数据
Winsock1.GetData bxb
'保存分包收到的数据
If iCount = 0 Then '第一次接收
mData = bxb
iCount = 1
Else
ReDim Preserve mData(mLength + bytesTotal)
CopyMemory mData(mLength + 1), bxb(0), bytesTotal
End If
mLength = UBound(mData)
'判断结尾(结尾4个字节)
CopyMemory FinisData(0), mData(mLength - 3), 4
Finis = FinisData
If Finis = "`!" Then
'如果是结尾,截断结尾标志数据
ReDim Preserve mData(mLength - 4)
'写入文件
Open "d:\2.exe" For Binary As #2
Put #2, , mData
Close #2
Erase mData
iCount = 0
mLength = 0
MsgBox "OK"
End If思路就这样,没有测试,下班了......