[请教]Delphi7.0中使用TClientSocket进行Socket编程的问题:我有以下的消息结构,需要通过TClientSocket发送到Server端: type TUserName = array[0..12] of char;
type TPassWord = array[0..10] of char;
type
  TMsg_Login = record
    mlen: LongWord; //消息长度..
    mtype: LongWord;  //消息类型编码..
    midx: LongWord; //消息序号..
    muser: TUserName;  //用户名称
    mpass: TPassWord;  //用户密码.
end;
type MsgLogin = ^TMsg_Login;
发送程序我是这样写的: procedure TForm1.SendMsg(Sender: TObject);
var mLogin :MsgLogin;
begin
  //检查连接是否已经建立
  if(not clientSocket.Active)then
  begin
    ShowMessage('请先连接到服务器...');
    Exit;
  end;

  //构造消息内容
           New(mLogin);
      
           mLogin.mlen := SizeOf(TMsg_Login);
           mLogin.midx := 1;
           mLogin.mtype := 1;
           mLogin.muser := 'wang';
           mLogin.mpass := 'wei';   
  
  
  try
      //请注意这里,使用以下的语句发送是否正确
      clientSocket.Socket.SendBuf(mLogin,mLogin.mlen);
      
      ShowMessage('发送数据成功~');
  except
    ShowMessage('发送数据错误~');
  end;           //析构消息
           Dispose(mLogin);
end;消息确实会被发送出去,Java写的服务器端接收数据到Buffer后,我以一下的方式来读去消息值:以mLogin.mlen(消息长度)为例,取出Buffer中的前4个字节到byte[](因为LongWord类型会占4个字节),然后以NBO(网络字节序)编码格式解析成int(java中的整型数),但结果是错误的。我的问题是,TClientSocket发送数据时,Longword的编码方式是按照NBO编码的么?如何进行构造消息,才能在服务器端正确的解析消息内容呢?
TUserName(字符数组)类型,是怎样编码的?在发送和解析中我需要注意什么??

解决方案 »

  1.   

    delphi里面int就是4  int64是8 你看看
      

  2.   

    是的,长度没有问题 ,longword 是4字节 无符号整形,但我不知道在服务器端 要怎样解析才能够正确读取消息呢?
      

  3.   

    socket传输多数是使用自己定义协议,生成一个字符串传输过去,再按协议解析
      

  4.   

    ClientSocket
    ServerSocket
    一個發,一個收
      

  5.   

    请问楼主,Delph7中好像没有TClientSocket啊?
      

  6.   

    你好像 是把内存地址给发过去了,你尝试把内容copy到buffer,然后再发送看看...