问题可能出在用WINSOCK.SENDDATA传输上面~~似乎每次传输有最大限制~~楼上的代码我没有测试过~~不好说啥~~~
下面转贴一个SENDFILE代码:
发送端:
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim flag As String
Winsock2.GetData flag
If flag = "ok" Then
Dim BytDate() As Byte
Dim FileName As String
Dim lngFile As Long
Dim i As Long
FileName = textPath.Text '取得文件名及路径
lngFile = FileLen(FileName) \ 1024 '取得文件长度
For i = 0 To lngFile
ReDim myFile(1023) As Byte
Open FileName For Binary As #1
Get #1, i * 1024 + 1, myFile
Close #1
Winsock1.SendData myFile
DoEvents
Next i
End If
End Sub
接受端:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Static i As Long
Dim myFile() As Byte
Dim myLong As Double
Dim myPath As String
myPath = path
ReDim myFile(0 To bytesTotal - 1) '此处也可以是(0 To bytesTotal-1)
Winsock1.GetData myFile
Open myPath For Binary As #1 '新建文件
myLong = FileLen(myPath)
Put #1, myLong + 1, myFile '将收到的数据写入新文件中
Close #1 '关闭
Private Sub cmdSend_Click()
'向服务器发送文件
Dim myFile() As Byte
Dim lngFile As Long '文件长度
Dim FileName As String '文件名称
Static i As Single
sockClient.Close
sockClient.Connect
Do
DoEvents
If sockClient.State = sckConnected Then
Exit Do
Else
i = i + 1
If i > 200000 Then
Dim box As String
box = MsgBox("是否放弃?", vbYesNo, "连接失败:")
If box = vbYes Then
i = 0
Exit Do
Else
i = 0
End If
End If
End If
DoEvents
Loop
lenth = 0
'检查是否与服务器连接
If sockClient.State = sckConnected Then
Private Sub sockServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
'接收文件
Static i As Long
Dim myFile() As Byte
Dim myLong As Double
Dim myPath As String
myPath = VB.App.Path & "\a.doc"
cmdC.Caption = "正在接收数据... " & bytesTotal
ReDim myFile(0 To bytesTotal - 1) '此处也可以是(0 To bytesTotal-1)
sockServer(Index).GetData myFile
i = i + 1
Open myPath For Binary As #1 '新建文件
Put #1, lenth + 1, myFile '将收到的数据写入新文件中
Close #1 '关闭
'记录文件长度
lenth = lenth + UBound(myFile) - LBound(myFile) + 1