最近做一个SOCKET的程序碰到难题请各位帮助,
前题:对方用C编写的程序,他们使用GB2312编码。我使用VB6,VB中一般使用unicode编码。
假设如下
Unsigned Integer 无符号整数(非网络字节顺序)
Integer 整数,可为正整数、负整数或零(非网络字节顺序)
Octet String 定长字符串,位数不足时,如果左补0则补ASCII表示的零,如果右补0则补二进制的零字段名 字节数 类型 描述
Header->dwType 4 Integer 数据类型ID:3204
Header->dwLength 4 Unsigned Integer 实际数据长度(登陆请求消息长度-header长度)
nCompanyID 4 Integer 企业编号
szUserName 20 Octet String 用户名
szPassword 16 Octet String 密码
nVersion 4 Unsigned Integer 版本号:1
上面是一个登陆操作
参数如下:
数据类型是:3204 企业编号:1030 用户名:csdn 密码:csdn 版本号是:1
我是这样做的
Private Sub Command1_Click()
dim sendmsg as string
dim send() byte
dim i,j,n as Integer
dwtype="33323034"
dwlength="3334" '52个字节长度
nCompanyID="31303330"
szUserName="6373646E00000000000000000000000000000000"
szpassword="6373646E000000000000000000000000"
nversion="31"
sendmsg=dwtype&dwlength&nCompanyID&szUserName&szpassword&nversion
n=len(sendmsg)/2-1
redim send(0 to n) as byte
j=0
for i=1 to len(sendmsg) step 2
send(j)=cbyte("&H" & mid(sendmsg,i,2))
next i
winsock1.SendData send()
end sub
上面是发请求登陆的代码下面是接收的过程
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
Dim tempstring As String
Dim recarray() As Byte
Winsock1.GetData recarray, vbarrar + vbByte
For i = 0 To UBound(recarray)
If (Len(Hex(recarray(i))) = 1) Then
tempstring = tempstring & "0" & Hex(recarray(i)) & ""
Else
tempstring = tempstring & Hex(recarray(i)) & ""
End If
DoEvents
Next i
Debug.Print "Receive msg=" & tempstring
End Sub我这样做收到的和发送都错了,请各位指教!
前题:对方用C编写的程序,他们使用GB2312编码。我使用VB6,VB中一般使用unicode编码。
假设如下
Unsigned Integer 无符号整数(非网络字节顺序)
Integer 整数,可为正整数、负整数或零(非网络字节顺序)
Octet String 定长字符串,位数不足时,如果左补0则补ASCII表示的零,如果右补0则补二进制的零字段名 字节数 类型 描述
Header->dwType 4 Integer 数据类型ID:3204
Header->dwLength 4 Unsigned Integer 实际数据长度(登陆请求消息长度-header长度)
nCompanyID 4 Integer 企业编号
szUserName 20 Octet String 用户名
szPassword 16 Octet String 密码
nVersion 4 Unsigned Integer 版本号:1
上面是一个登陆操作
参数如下:
数据类型是:3204 企业编号:1030 用户名:csdn 密码:csdn 版本号是:1
我是这样做的
Private Sub Command1_Click()
dim sendmsg as string
dim send() byte
dim i,j,n as Integer
dwtype="33323034"
dwlength="3334" '52个字节长度
nCompanyID="31303330"
szUserName="6373646E00000000000000000000000000000000"
szpassword="6373646E000000000000000000000000"
nversion="31"
sendmsg=dwtype&dwlength&nCompanyID&szUserName&szpassword&nversion
n=len(sendmsg)/2-1
redim send(0 to n) as byte
j=0
for i=1 to len(sendmsg) step 2
send(j)=cbyte("&H" & mid(sendmsg,i,2))
next i
winsock1.SendData send()
end sub
上面是发请求登陆的代码下面是接收的过程
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim msg As String
Dim tempstring As String
Dim recarray() As Byte
Winsock1.GetData recarray, vbarrar + vbByte
For i = 0 To UBound(recarray)
If (Len(Hex(recarray(i))) = 1) Then
tempstring = tempstring & "0" & Hex(recarray(i)) & ""
Else
tempstring = tempstring & Hex(recarray(i)) & ""
End If
DoEvents
Next i
Debug.Print "Receive msg=" & tempstring
End Sub我这样做收到的和发送都错了,请各位指教!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货