本人通过winsock发送一个■网络序的二进制的数据流■,可是对这些概念和转换实在不懂,所以请您给我留个程序,谢谢!需要发送的字段:
=========================================================================================字段名          字节数   类型              描述
Header->dwType    4    Integer            数据类型ID:3204
Header->dwLength  4    Unsigned Integer   实际数据长度(登陆请求消息长度-header长度)
nCompanyID        4    Integer            企业编号:1111
szUserName       20    Octet String       用户名:test
szPassword       16    Octet String       密码:test
nVersion          4    Unsigned Integer   版本号:1
其中:Unsigned Integer  无符号整数(非网络字节顺序)
Integer           整数,可为正整数、负整数或零(非网络字节顺序)
Octet String      定长字符串,位数不足时,如果左补0则补ASCII表示的零,如果右补0则补二进制的零==========================================================================================请把上述的6个字段组成一个网络序二进制的数据流,发送出去。winsock1.senddata 此网络序二进制的数据流
注:网络序的二进制流: 
比如:Header->dwType    4    Integer            数据类型ID:32043204的十六进制形式是C84,网络的数据传送格式是00000C84,然后再转换成2进制的即可.string的就不用转换了,比如说发送
szUserName       20    Octet String       用户名:test20个字节,前4个字节是test,后16个字节是二进制的0请各位详细的写一下,小弟愚笨. 衷心感谢!

解决方案 »

  1.   

    一个朋友给我了一个二进制的程序,但不是网络序的二进制流,看看能否转成网络序的二进制流:
    Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Type aa
        DwType As Integer
        DwLength As Integer
        NCompanyID As Integer
        SzUserName As String * 20
        SzPassword As String * 16
        nVersion As Integer
    End TypePrivate Sub Command1_Click()
        Dim mUserIp As String
        Dim mMsgIp As String
        Dim mMsgPort As Integer
        
        mUserIp = Winsock1.LocalIP
        
        mMsgIp = "127.0.0.1"
        mMsgPort = 2000
        
        Winsock1.RemoteHost = mMsgIp
        Winsock1.RemotePort = mMsgPort
        Winsock1.ConnectEnd SubPrivate Sub Winsock1_Connect()
    MsgBox "连接成功"
    End SubPrivate Sub Command3_Click()
    '赋值并发送二进制流
      Dim MyRecord As aa   '声明变量。'   '对 EmployeeRecord 变量的赋值必须在过程内进行。
       MyRecord.DwType = 3204   '给一个元素赋值。
       MyRecord.DwLength = 4
       MyRecord.NCompanyID = 1111
       MyRecord.SzUserName = "test"
       MyRecord.SzPassword = "test"
       MyRecord.nVersion = 1
       Dim buffer() As Byte
       ReDim buffer(Len(MyRecord) - 1)   CopyMemory buffer(0), MyRecord, Len(MyRecord)
       Winsock1.SendData buffer
            
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        '获得数据    Dim str() As Byte
        Winsock1.GetData str, vbArray + vbByte    Dim MyRecord As aa
        CopyMemory MyRecord, str(0), UBound(str) + 1
        Text1.Text = MyRecord.DwLength & "|" & MyRecord.DwType & "|" & MyRecord.dwResult & "|"
    Text1.Text = Text1.Text & MyRecord.szReason
    End Sub
      

  2.   

    感谢 sdgzhk(网络流氓) ,可是怎么转换呢?
    谢谢
      

  3.   

    这个问题暂时不能告诉你,因为你是说用的是VB,如果是VC我就马上可以回答.呵呵
      

  4.   

    对了,大哥,我用VB啊,如果用VC的话我这里有例子了。
      

  5.   

    TO:回复人: baoaya(点头) 我没有搜到合适的阿!搜的关键字是什么?谢谢