[请教]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(字符数组)类型,是怎样编码的?在发送和解析中我需要注意什么??
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(字符数组)类型,是怎样编码的?在发送和解析中我需要注意什么??
解决方案 »
- 在delphi中用Sql如何只显示查询结果的前n行记录?
- 网络打印问题!~在线等!
- 什么控制程序只运行一个?
- 怎么处理批处理文件*.BAT出现的错误!
- 写了个很简单的线程程序出错了,大家帮忙看看!急,解决马上给分
- 请教高高手:使用SQL Server时,DELPHI的DBGRID的垂直滚动条问题!
- ADOTable1 连接ACCESS数据库问题,大家多费心
- 我想把两个控件捆绑使用,该怎么办?????
- ****************dbgrid和query问题********************
- 调用C++编写的DLL中的API函数方法是什么,与一般的DLL中的函数调用有什么不一样吗?
- 如何将'号用SQL语句插入到ACCESS库里?
- fastreport问题
ServerSocket
一個發,一個收