我定义的一个通讯的格式如下:
Type
TCommDataFormat=record
Head:Byte;
SerialNumber:Byte;//帧序号
StreamLen:word;//为下个字段的长度。
Stream:array of char;
end;
C端:的处理:
var
temstr:TCommDataFormat;m:integer;str:string;UDP1: TNMUDP; MyStream: TMemoryStream;
begin
str:='abcdefghijkmn';
with TmpStr do
begin
Head:=$30;
SerialNumber:=1;
StreamLen:=length(str);
setlength(stream,streamLen);
for i:=0 to m-1 do
Stream[i]:=(str[i+1]);
end;
//发送:
MyStream:=TMemoryStream.Create;
try
MyStream.Write(TmpStr, sizeof(TCommDataFormat));
LoginUDP.SendStream(mystream);
finally
mystream.SaveToFile('c.txt');
MyStream.Free;
end;
服务端:
var
UDPServer: TIdUDPServer;//delphi6自带的UDPSERVER控件。
implement
TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
test:TCommDataFormat; DataStringStream: TMemoryStream;
begin
DataStringStream := TMemoryStream.Create;
try
DataStringStream.CopyFrom(AData, AData.Size);
if DataStringStream.Size<>sizeof(TCommDataFormat) then
begin
showmessage('接受有错误!');
end;
DataStringStream.Read(test,DataStringStream.Size);
showmessage(inttostr(test.Head));
showmessage(inttostr(test.SerNumber));
showmessage(inttostr(test.StreamLen));
finally
DataStringStream.SaveToFile('d.txt');
DataStringStream.Free;
end;
end
///////////////////////////////////////////
上面为我实现的代码。我的问题是这样的。
我收到的在服务端中,那三个showmessage()出来的东西都为0,但是他们两个流另存的文件,c.txt,d.txt的内容用HEX表示的内容是一模一样的。但是收到结果我想解析出来都是0,这是为什么呀?
而且我应该怎样解析出那个记录的最后一个字段呀stream。
谢谢呀!我现在就100分了,不够等以后我再给。请教。
由于现在的服务端是我自己的测试断,我是要和另外一个VC的服务端连接。应次他发送给我的UDP包也应该是那个记录格式,我来解析处理,请指教,谢谢谢谢·!!
Type
TCommDataFormat=record
Head:Byte;
SerialNumber:Byte;//帧序号
StreamLen:word;//为下个字段的长度。
Stream:array of char;
end;
C端:的处理:
var
temstr:TCommDataFormat;m:integer;str:string;UDP1: TNMUDP; MyStream: TMemoryStream;
begin
str:='abcdefghijkmn';
with TmpStr do
begin
Head:=$30;
SerialNumber:=1;
StreamLen:=length(str);
setlength(stream,streamLen);
for i:=0 to m-1 do
Stream[i]:=(str[i+1]);
end;
//发送:
MyStream:=TMemoryStream.Create;
try
MyStream.Write(TmpStr, sizeof(TCommDataFormat));
LoginUDP.SendStream(mystream);
finally
mystream.SaveToFile('c.txt');
MyStream.Free;
end;
服务端:
var
UDPServer: TIdUDPServer;//delphi6自带的UDPSERVER控件。
implement
TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
test:TCommDataFormat; DataStringStream: TMemoryStream;
begin
DataStringStream := TMemoryStream.Create;
try
DataStringStream.CopyFrom(AData, AData.Size);
if DataStringStream.Size<>sizeof(TCommDataFormat) then
begin
showmessage('接受有错误!');
end;
DataStringStream.Read(test,DataStringStream.Size);
showmessage(inttostr(test.Head));
showmessage(inttostr(test.SerNumber));
showmessage(inttostr(test.StreamLen));
finally
DataStringStream.SaveToFile('d.txt');
DataStringStream.Free;
end;
end
///////////////////////////////////////////
上面为我实现的代码。我的问题是这样的。
我收到的在服务端中,那三个showmessage()出来的东西都为0,但是他们两个流另存的文件,c.txt,d.txt的内容用HEX表示的内容是一模一样的。但是收到结果我想解析出来都是0,这是为什么呀?
而且我应该怎样解析出那个记录的最后一个字段呀stream。
谢谢呀!我现在就100分了,不够等以后我再给。请教。
由于现在的服务端是我自己的测试断,我是要和另外一个VC的服务端连接。应次他发送给我的UDP包也应该是那个记录格式,我来解析处理,请指教,谢谢谢谢·!!
还是谢谢大家看了本帖子。!
谢谢