socker发送的小问题(50分)

  • 主题发起人 主题发起人 jumphigh
  • 开始时间 开始时间
J

jumphigh

Unregistered / Unconfirmed
GUEST, unregistred user!
for i:=1 to treeview1.Items.Count-1 do
begin
serversocket1.socket.SendText('Newchater'+treeview1.Items.Item.Text);
end;
我想用上面的语句发一个客户列表到客户端
可是在客户端接受的时候
他变成了一个string,
如果想要一次循环发一个string,并给一个结束标志,可以吗
 
一次循环发一个string,并给一个特殊标志,如:#、$等,接收时判断,遇到则分为另一string。
或者用SendBuffer,自己定义一个Record,按一定格式发送!
 
那不是挺烦的

还要编一个字符串匹配之类的过程

有没有的规定的方法可以告诉客户端
我这次发送已完,下面的数据是另一个字符串的了

如果用sendbuffer的话
要怎样定义这个 record呢


我是初学者,问题也许提得太菜
请多指教了
 
首先,你这个循环怎么是从1开始的?不大对哦!
其次,,,,如果真象你说的,就做个结束标志吧。
如果都是单行的TEXT,可以发:TEXT+#13#10,试试
 
wint的方法可以试试!
要是各项有不同类型,用结构挺方便的!eg:
Type MyText=Record;
Subject:integer;
Data1:XXXX;
Data2:XXXXX;
...
End:

procedure SendText;
Var pText:^MyText;
Buf:array[0..YourRecordSize] of byte;
begin
pText:=@Buf[0];
pText^.Subject:=...;
pText^.Data1:=...;
...
//Send Buffer;
end;
接收:
//Receive Buffer
pText:=@(Buf[0]);
case pText^.Subject of
0: ..
1: ..
...
OK?
 
发送方先把items读取到一个stringlist里面,然后把stringlist.text属性作为一个
string发送过去,接受方接受到后,把收到的字符串赋值给一个stringlist.text属性,
这样自然就把字符串分割开了,不用你做任何操作.
 

var
sl: TstringList;
i: integer;
begin
sl:= TstringList.create;
for i:=1 to treeview1.Items.Count-1 do
sl.add('Newchater'+treeview1.Items.Item.Text);
try
serversocket1.socket.SendText(sl.text);
finally
sl.free;
end;
end;
to cAkk
帮你写清楚一点 , 不好意思 :&
 
to 张国龙:
你什么时候跑来的,被我抓到了,你小子这个月可惨了,嘻嘻:)

不过,这样写不是更好:)

var
s : string;
begin
s:='';
for i:=1 to treeview1.Items.Count-1 do
s:=s+treeview1.Items.Item.Text)+#13#10;

serversocket1.socket.SendText(s);

end;
 
#13的方法
好像不行

stringlist的方法在客户只实现了
分行

这几天忙着看水平考试的事
也没空看程序

不过我在看操作系统的时候
看到一个原语的概念

书上面说
无缓冲区的通讯原语,又成消息传递
send(who,msg)
receive(who,msg)
有的系统还提供带标记的发送
send(who,msg,tag)

 
后退
顶部