带头文件的结构体传输

fengyunjih 2009-05-16 01:21:23
delphi 中indy10传输2个结构体,用头文件区分开啦,如何来回传输啊,或者用tstringlist结构传输,但是,接收后要能够赋值的,如ls := tstringlist.create;
str := 'ID=' + sID + #8 + 'NAME=' + sName + #8 + 'Age=' + inttostr(age) + #8;
ls.add(str);

iohandler.writeln(inttostr(ls.count));
iohandler.writestrings(ls);


接收端:
ls := tstringlist.create;
count := connecting.readln;
connecting.readfrmsfc(ls,count);
这样传输后接收后不能读取name的值,id的值,我要的是接受后,能让name的值能读取啊
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2009-05-22
  • 打赏
  • 举报
回复
一个类似于StringList,可以到http://download.csdn.net/source/396131下载,其中的uHSStringList单元,有一个THSStringList

Indy10.2.3也可以到http://download.csdn.net/source/583914下载
僵哥 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fengyunjih 的回复:]
能用indy 9 或10 自带的发送stream,并将stream内容读到ls:TStringList;里并以空格隔开,将'NAME=' + sName中sname的值读到一个定义好的name中吗?
[/Quote]
Indy10有多个版本,我使用的是Indy10.2.3,代码只是供参考使用。
TStringList在Delphi2007当中是支持LineBreak设置的,如果是低版本,可以通过StringReplace转换。
fengyunjih 2009-05-22
  • 打赏
  • 举报
回复
能用indy 9 或10 自带的发送stream,并将stream内容读到ls:TStringList;里并以空格隔开,将'NAME=' + sName中sname的值读到一个定义好的name中吗?
fengyunjih 2009-05-20
  • 打赏
  • 举报
回复
没注册iohandler,
ls.LineBreak := #8;
没有LineBreak 这个
shuihan20e 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fengyunjih 的回复:]
2楼的,我用的是indy10 有自带的接受发送程序,用你写的出错啊
[/Quote]
啥错?
fengyunjih 2009-05-17
  • 打赏
  • 举报
回复
2楼的,我用的是indy10 有自带的接受发送程序,用你写的出错啊
僵哥 2009-05-16
  • 打赏
  • 举报
回复
uses
IdIOHandler;
procedure SendStream( IOHandler: TIdIOHandler; Data: TStream);
begin
IOHandler.Write(Data,0,true);
end;

procedure RecvStream( IOHandler: TIdIOHandler; Data: TStream);
var
iCount: LongWord;
begin
iCount := IOHandler.ReadLongWord(false);
Data.Size := iCount;
IOHandler.ReadStream(Data,iCount);
end;

发送:

var
stream: TMemoryStream;
ls:TStringList;
str: String;
begin
stream:=TMemoryStream.Create;
ls := tstringlist.create;
str := 'ID=' + sID + #8 + 'NAME=' + sName + #8 + 'Age=' + inttostr(age) + #8;
ls.add(str);
ls.SaveToStream(Stream);
SendStream(iohandler ,stream);
ls.Free;
stream.Free;
end;


接收:


var
stream: TMemoryStream;
ls:TStringList;
str: String;
begin
stream:=TMemoryStream.Create;
ls := tstringlist.create;
RecvStream(iohandler ,stream);
ls.LineBreak := #8;
ls.LoadFrmStream(Stream);
ShowMessage(ls.Value['Name']);
ls.Free;
stream.Free;
end;

fengyunjih 2009-05-16
  • 打赏
  • 举报
回复
揉揉揉揉揉揉

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧