我通过字节偏移读取接收到udp报ServRecBuff,数据结构为
ServRecBuff= record
msgtype : byte
raceType : byte
msgcontent array[0..299] of char
end;
其中,msgcontent 对应数据结构struct1(msgtype=1时),struct2(msgtype=2时)
struct1=record
name: array[0..3]of char;
url:array[0..200]of char;
end;
struct2=record
name:array[0..3] of char;
email:array[0..499]of char;
pwd;array[0..31]of char;
end;
我想把接受到的报ServRecBuff1保存到listview中,然后再通过双击把数据取出来,如果不保存数据直接读,显示结果是正确的,保存以后再读便出错,奇怪!请大侠帮忙!
代码如下:
procedure TForm1.IdUdpServerRead(Sender:TObject;Adata:TStream:ABinding:TIdSocketHandle);
var
ServRecBuff1:ServRecBuff;
ms:TMemoryStream;
size,ret,i:integer;
begin
size:=Adata.size;
ZeroMemory(@ServRecvBuff1,sizeof(ServRecvBuff1));
ms:=TMemoryStream.Create;
AData.Seek(0,soFromBeginning);
ms.Seek(0,soFromBeginning);
ms.ReadBuffer(ServRecvBuff1,size);//这样可以读取ServRecBuff1的数据 ...............
end;
请问如何定义ms2:TMemoryStream;
可以在此程序中通过servRecvBuff1,读出struct1和struct2的结构中的数据,并用变量保存下来?
比如 ms2.readBuff(struct1,sizeof (struct1));
ServRecBuff= record
msgtype : byte
raceType : byte
msgcontent array[0..299] of char
end;
其中,msgcontent 对应数据结构struct1(msgtype=1时),struct2(msgtype=2时)
struct1=record
name: array[0..3]of char;
url:array[0..200]of char;
end;
struct2=record
name:array[0..3] of char;
email:array[0..499]of char;
pwd;array[0..31]of char;
end;
我想把接受到的报ServRecBuff1保存到listview中,然后再通过双击把数据取出来,如果不保存数据直接读,显示结果是正确的,保存以后再读便出错,奇怪!请大侠帮忙!
代码如下:
procedure TForm1.IdUdpServerRead(Sender:TObject;Adata:TStream:ABinding:TIdSocketHandle);
var
ServRecBuff1:ServRecBuff;
ms:TMemoryStream;
size,ret,i:integer;
begin
size:=Adata.size;
ZeroMemory(@ServRecvBuff1,sizeof(ServRecvBuff1));
ms:=TMemoryStream.Create;
AData.Seek(0,soFromBeginning);
ms.Seek(0,soFromBeginning);
ms.ReadBuffer(ServRecvBuff1,size);//这样可以读取ServRecBuff1的数据 ...............
end;
请问如何定义ms2:TMemoryStream;
可以在此程序中通过servRecvBuff1,读出struct1和struct2的结构中的数据,并用变量保存下来?
比如 ms2.readBuff(struct1,sizeof (struct1));
解决方案 »
- 构件没有父窗口
- delphi生成的可执行文件,在其它目录无法设断点调试,有解决方法吗?
- 如何将一个WideString中的Ascii码类型的字符转换为汉字的形式字符?
- 如何利用udpclient与udpserver传送文件
- 关于FastReport的loadfromfile?
- (再线等待)急! 关于文件读取及其类型转换问题
- 如何让运行的程序隐藏,并且底下的任务栏也看不见,只能运行在后台
- 大家帮我参谋参谋啊,工作选择问题!进者有分!`在线等待
- 对不起!哪里有财务自考班?
- 请问调用CORBA服务器出现NO_IMPLEMENT是什么原因?
- 如何让Dbgrid指定某特殊数据地行显示在第一行
- 各位大虾,关于timer组件监视数据库的问题!!!请高手们帮帮小弟啊!!见人有分啊!!
type MsgHead=record
MsgType:string[10];
end
...............UdpRead:
Adata.ReadBuffer(_MsgHead,SizeOf(MsgHead));
if _MsgHead.MsgType='struct1' then
Adata.ReadBuffer(_struct1Data,SizeOf(Struct1Data);
else if _MsgHead.MsgType='struct2' then
Adata.ReadBuffer(_struct2Data,SizeOf(Struct2Data);
大侠,消息结构是发送方用c语言构造好的,我只能接收并解析,所以不可能先接收消息头再接收消息体。如何根据同一条消息内的消息类型来解析该消息的消息体,请大侠给于详细指点。