我要编写一个socket客户端,与我公司的服务器互连,整个消息结构体如下:
Command Length   4 longInt    整个消息的长度
Command ID       4 longint    命令
Sequence         4 longint    序列号,保证唯一性
username        16 char       用户名
passwd          16 char       密码我用了ClientSocket,怎样将这些内容(不同类型的数据)写入socket?
网络字节序应该怎么做?望高手指点,最好有例子. 分数可以另外加.
如果哪位高手做过这样的程序,请多多帮忙.

解决方案 »

  1.   

    利用Socket通信,先将数据转换成字符串。将消息转换成带有标记字符的字符串,然后调用ClientSocket发送字符串。服务器端再解析字符串,取出相应数据。Delphi的Demo中,有一个Chat的例子程序,里面有如何用ClientSocket通信。
      

  2.   

    longint 怎么转换为字符串?
    还有服务器端程序是原有的我只能按消息结构发
      

  3.   

    函数inttostr将longint转换成Str,或用Format
    注意:Pascal对高字节与低字节的存放顺序与C的存放顺序是不一样的。
      

  4.   

    消息结构要求的是整形.我想的办法是把各个字段写入一个数据流中,
    在写入的时候进行网络字节序进行转换,然后调用
    ClientSocket1.Socket.SendStream();将数据发出.大概的方法是这样
    但我写出的总是不对.基础太差了.还望高手能够将上述过程写出来.
      

  5.   

    TSmsg = record 
    Command_Length  :  longInt ;//   整个消息的长度
    Command_ID      : longint  ;//  命令
    Sequence        : longint  ;//  序列号,保证唯一性
    username        : Array[0..15] of char ;//      用户名
    passwd          : Array[0..15] of  char;//       密码
    end;procedure SendMsg(AMsg : TSMsg);
    var
       vS : TMemoryStream;
    begin
       vS := TMemoryStream.Create;
       try
         vS.Write(AMsg, Sizeof(AMsg));  //
         ClientSocket1.SendStream(vS);
       finally
         vS.Free;
       end;
    end;