我想发送如下的字节数组例如:
dim a(5) as byte
a(0)=74
a(1)=90
a(2)=113
a(3)=0
a(4)=0
a(5)=235
我想用winsock控件把他发出去,但是我要加一个头"@",还有一个尾"|"
所以我这样做的:
先定义s=a '把a转换为字符串
然后sss1="@" + s + "|"
最后winsock1.SendData sss
可是我另一边winsock接收时候用winsock2.GetData pdata, vbString
取过来的数据分离出头"@"和尾"|"之后得到的字符串sss2,直接再转换为字节数组:
dim a2() as byte
as=sss2
a2()却跟原来的a()不一样了
(在前面发送时使用过strconv函数转换,之后接收时再反转换也是不正确)
请问,我到底该怎么发送才能接受正确呢,非常感谢
dim a(5) as byte
a(0)=74
a(1)=90
a(2)=113
a(3)=0
a(4)=0
a(5)=235
我想用winsock控件把他发出去,但是我要加一个头"@",还有一个尾"|"
所以我这样做的:
先定义s=a '把a转换为字符串
然后sss1="@" + s + "|"
最后winsock1.SendData sss
可是我另一边winsock接收时候用winsock2.GetData pdata, vbString
取过来的数据分离出头"@"和尾"|"之后得到的字符串sss2,直接再转换为字节数组:
dim a2() as byte
as=sss2
a2()却跟原来的a()不一样了
(在前面发送时使用过strconv函数转换,之后接收时再反转换也是不正确)
请问,我到底该怎么发送才能接受正确呢,非常感谢
此时WinSock控件会自动调用strconv函数转换,破坏二进制数据直接用二进制协议算了
先发送4字节长度值,再发送数据
a(1)=74
a(2)=90
a(3)=113
a(4)=0
a(5)=0
a(6)=235a(0) = Asc("@")
a(7) = Asc("|")winsock1.SendData a接收时候用winsock2.GetData b, vbByte, 8
NewS(0)= asc("@")
NewS(7)= asc("|")
for i = 0 to 5
NewS(i+1) = a(i)
next
winsock1.SendData News接收的时候就使用2进只接收就可以了!!和你上面的代码也麻烦不了很多,不是吗?
Dim intLength As Integer
Dim intArraySize As Integer
Dim bytRet() As Byte '定义字节数组
intLength = Len(data)
If (intLength Mod 2) = 0 Then '如果输入的字符串长度是偶数
intArraySize = intLength \ 2 '直接以长度的一半作为数组大小
Else '为奇数
strTempData = "0" & strTempData '补零变成偶数
intArraySize = Len(strTempData) \ 2
End If
ReDim bytRet(0 To intArraySize - 1) As Byte '重定义字节数组 For i = 0 To intArraySize - 1
bytRet(i) = CInt("&H" & Mid(data, 2 * i + 1, 2)) '将得到的十六进制格式转换字节数组
Next
Decoder = bytRet
End Function
Public Function Coder(data() As Byte) As String Dim strRet As String
Dim strTemp As String
Dim i As Integer
On Error GoTo Errhander:
For i = LBound(data) To UBound(data)
strTemp = Hex(data(i))
'补齐字符
If Len(strTemp) = 1 Then strTemp = "0" & strTemp
strRet = strRet & strTemp
Next
Coder = strRet
Exit Function
Errhander:
Coder = ""
End Function
解析出来,
要用什么方法,不一定上面的方法,换个思路也行,只要解决问题就可以,谢谢,再加分50也可以
直接用二进制协议算了
先发送4字节长度值,再发送数据
接受者:zyl910 重要性:重要性:1 非常不重要重要性:2 不重要重要性:3 一般重要性:4 重要重要性:5 非常重要
内容 //直接用二进制协议算了
先发送4字节长度值,再发送数据这样的话,我必须分开发送,就不能批量发送了啊,用字符串可以标识出开始和结尾,用这个来判别结束从而分开条数,这样的思路没法解决是吗,非常感谢你的回复。
因为我现在是做的程序,需要发送一组预先不知道长度的16进制的数组,然后还要附加上发送这个十六进制数的设备号(例2314,为整型),所以我才想到要以字符串形式发送出去,大哥,帮帮我,我太弱了 ===============================================用Byte数组当缓冲区
发送时将长度、数据在缓冲区内合并好了再发送
接收时先将数据放在缓冲区中,先读取长度值,再分析数据具体代码可参考《数据结构》中的关于串的算法
串算法就是专门处理这一类问题的
注意串并不是单指字符串,凡是有共同点多个数据都能称为串(现在更流行用流这个词)用字符协议有很大的缺点的:你不能肯定发送的数据中会不会出现控制字符
所以以前网络协议数据都用7位ASCII码,高128作控制字符