Option ExplicitPrivate Sub Command1_Click() Dim f As Integer Dim bytData(0 To 1) As Byte Dim strP As String
'一个汉字占用两个字节,我这里举一个例子,假使你接收的数组只有两个字节 bytData(0) = &HBA 'UniCode字符:汉 的低字节 bytData(1) = &HBA 'UniCode字符:汉 的高字节 strP = StrConv(bytData, vbUnicode) '转换为UniCode f = FreeFile Open "C:\1.txt" For Binary As #f '保存文件 Put #f, 1, strP End Sub 执行了本代码后,你到C盘打开1.txt看看,里面有没有一个“汉”字,如果有就写成功了。
发现问题了,发送的内容如果是:“数据”这两个字,对应的二进制代码应该是:CA FD BE DD。 但我用DataArrival事件却接收到了5个字节:CA FD ED BE DD。 如果发送“数”这一个字,收到了3个字节:CA FD ED。也就是说ED这个字节是不正确的。应该是CA FD 。 请问这个现象是怎么回事呢??大家给点儿意见啊!
Dim lngFileSize As Long Dim lngReadSize As Long Dim strFileName As String Dim lngState As Long Dim fs As Integer Private Sub Command1_Click() strFileName = "C:\test.rar" lngFileSize = 0 lngReadSize = 0 lngState = 0 Winsock1.Connect "127.0.0.1", 999 End SubPrivate Sub Winsock1_Connect() Winsock1.SendData "GET " & strFileName End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim byBuff() As Byte Dim strBuff As String Select Case lngState Case 0: ' 取得服务器发回来的文件数据大小 Winsock1.GetData strBuff, vbString, bytesTotal If Len(strBuff) < 5 Then Winsock1.Close Exit Sub End If If UCase(Left(strBuff, 3)) <> "+OK" Then Winsock1.Close Exit Sub End If strBuff = Right(strBuff, Len(strBuff) - 4) If IsNumeric(strBuff) = False Then Winsock1.Close Exit Sub End If lngFileSize = CLng(strBuff) lngState = 1 Winsock1.SendData "+OK Send Data" Exit Sub Case 1: '开始读取文件数据 Winsock1.GetData byBuff, vbArray + vbByte, bytesTotal If lngReadSize = 0 Then fs = FreeFile Open strFileName For Binary As #fs End If Put #fs, , byBuff lngReadSize = lngReadSize + bytesTotal If lngReadSize >= lngFileSize Then Close #fs Winsock1.Close End If Exit Sub End Select End Sub
Option ExplicitPrivate Sub Command1_Click()
Dim f As Integer
Dim bytData(0 To 1) As Byte
Dim strP As String
'一个汉字占用两个字节,我这里举一个例子,假使你接收的数组只有两个字节
bytData(0) = &HBA 'UniCode字符:汉 的低字节
bytData(1) = &HBA 'UniCode字符:汉 的高字节
strP = StrConv(bytData, vbUnicode) '转换为UniCode
f = FreeFile
Open "C:\1.txt" For Binary As #f '保存文件
Put #f, 1, strP
End Sub
执行了本代码后,你到C盘打开1.txt看看,里面有没有一个“汉”字,如果有就写成功了。
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
但我用DataArrival事件却接收到了5个字节:CA FD ED BE DD。
如果发送“数”这一个字,收到了3个字节:CA FD ED。也就是说ED这个字节是不正确的。应该是CA FD 。
请问这个现象是怎么回事呢??大家给点儿意见啊!
那你就在接受时间中处理一下?添加一个延迟?Sleep 10之类的?
再追加一个问题,我现在传输TXT文件没有问题,我个人觉得传输什么格式的文件应该都没有区别吧,但我传输WORD文档就出错了。这是为什么呢
顺便追问一个问题:我现在传输TXT文件没有问题了,但传输WORD文件却不行,感觉应该跟程序没有关系吧
Dim lngFileSize As Long
Dim lngReadSize As Long
Dim strFileName As String
Dim lngState As Long
Dim fs As Integer
Private Sub Command1_Click()
strFileName = "C:\test.rar"
lngFileSize = 0
lngReadSize = 0
lngState = 0
Winsock1.Connect "127.0.0.1", 999
End SubPrivate Sub Winsock1_Connect()
Winsock1.SendData "GET " & strFileName
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim byBuff() As Byte
Dim strBuff As String
Select Case lngState
Case 0: ' 取得服务器发回来的文件数据大小
Winsock1.GetData strBuff, vbString, bytesTotal
If Len(strBuff) < 5 Then
Winsock1.Close
Exit Sub
End If
If UCase(Left(strBuff, 3)) <> "+OK" Then
Winsock1.Close
Exit Sub
End If
strBuff = Right(strBuff, Len(strBuff) - 4)
If IsNumeric(strBuff) = False Then
Winsock1.Close
Exit Sub
End If
lngFileSize = CLng(strBuff)
lngState = 1
Winsock1.SendData "+OK Send Data"
Exit Sub Case 1: '开始读取文件数据
Winsock1.GetData byBuff, vbArray + vbByte, bytesTotal
If lngReadSize = 0 Then
fs = FreeFile
Open strFileName For Binary As #fs
End If
Put #fs, , byBuff
lngReadSize = lngReadSize + bytesTotal
If lngReadSize >= lngFileSize Then
Close #fs
Winsock1.Close
End If
Exit Sub
End Select
End Sub