最近做一个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我这样做收到的和发送都错了,请各位指教!