问题现象:在服务端接收到的结构是乱码
vc中的结构
struct File_CMD
{
int m_msg;//操作码
char filename[512];//文件名或其它的
char user[32];//用户名
char PworCrc[32];//密码或CRC值
int SESSION;//连接标志,用来保持连接的
int m_ok;
LARGE_INTEGER Filesize;//文件大小
LARGE_INTEGER m_begin;//开始字
LARGE_INTEGER m_end;//结束
};
根据vc中的结构改的
记录的定义
type
client_record=record
m_msg:integer;//操作码
filename:string[255];//文件名或其它的
user:string[32];//用户名
PworCrc:string[32];//密码或CRC值
SESSION:integer;//连接标志,用来保持连接的
m_ok:integer;
Filesize:integer;//文件大小
m_begin:integer;//开始字
m_end:integer;//结束
end;
下面是主要代码
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Active:=true;
end;procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add(ClientSocket1.Socket.RemoteHost);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
GetMem(Buffer1,sizeof(xinxi));
ClientSocket1.Socket.SendBuf(Buffer1,sizeof(xinxi)) ;
end;procedure TForm1.FormCreate(Sender: TObject);
var
user,pass:string ;begin
//user:=SetLenth('test',32);
xinxi[0].m_msg:=1;//操作码
xinxi[0].filename:='s.text';//文件名或其它的
xinxi[0].user:='test';//用户名
xinxi[0].PworCrc:='test';//密码或CRC值
xinxi[0].SESSION:=3;//连接标志,用来保持连接的
xinxi[0].m_ok:=0;
xinxi[0].Filesize:=100000;//文件大小
xinxi[0].m_begin:=0;//开始字
xinxi[0].m_end:=100000;//结
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeMem(Buffer1,sizeof(xinxi));
end;
vc中的结构
struct File_CMD
{
int m_msg;//操作码
char filename[512];//文件名或其它的
char user[32];//用户名
char PworCrc[32];//密码或CRC值
int SESSION;//连接标志,用来保持连接的
int m_ok;
LARGE_INTEGER Filesize;//文件大小
LARGE_INTEGER m_begin;//开始字
LARGE_INTEGER m_end;//结束
};
根据vc中的结构改的
记录的定义
type
client_record=record
m_msg:integer;//操作码
filename:string[255];//文件名或其它的
user:string[32];//用户名
PworCrc:string[32];//密码或CRC值
SESSION:integer;//连接标志,用来保持连接的
m_ok:integer;
Filesize:integer;//文件大小
m_begin:integer;//开始字
m_end:integer;//结束
end;
下面是主要代码
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Active:=true;
end;procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.Add(ClientSocket1.Socket.RemoteHost);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
GetMem(Buffer1,sizeof(xinxi));
ClientSocket1.Socket.SendBuf(Buffer1,sizeof(xinxi)) ;
end;procedure TForm1.FormCreate(Sender: TObject);
var
user,pass:string ;begin
//user:=SetLenth('test',32);
xinxi[0].m_msg:=1;//操作码
xinxi[0].filename:='s.text';//文件名或其它的
xinxi[0].user:='test';//用户名
xinxi[0].PworCrc:='test';//密码或CRC值
xinxi[0].SESSION:=3;//连接标志,用来保持连接的
xinxi[0].m_ok:=0;
xinxi[0].Filesize:=100000;//文件大小
xinxi[0].m_begin:=0;//开始字
xinxi[0].m_end:=100000;//结
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeMem(Buffer1,sizeof(xinxi));
end;
m_msg:integer;
filename:array[0..511] of char;
user:array[0..31] of char;
PworCrc:array[0..31] of char;
SESSION:integer;
m_ok:integer;
Filesize:LARGE_INTEGER;
m_begin:LARGE_INTEGER;
m_end:LARGE_INTEGER;
end;
至于你说乱码就要看你怎么发送怎么接收了,估计代码有问题。结构体记得填充0后在初始化数据。
如果还有问题好好分析你2边数据
ClientSocket1.Socket.SendBuf(Buffer1,sizeof(xinxi)) ;
这两句修改为
ClientSocket1.Socket.SendBuf(xinxi,sizeof(xinxi)) ;
还是不得行,还是有乱码。乱码出现的位置是记录的第二个字段的第一位。
m_msg: integer; //操作码
filename: array[0..254] of char
; //文件名或其它的
user: array[0..31]of char; //用户名
PworCrc: array[0..31]of char; //密码或CRC值
SESSION: integer; //连接标志,用来保持连接的
m_ok: integer;
Filesize: int64; //文件大小
m_begin: int64; //开始字
m_end: int64; //结束 end;
就可以了,还是谢谢大家