indy10 里面的服务器端如何发消息给客户端?

walllacecn 2009-06-15 10:10:30
除了客户端刚连接上的时候可以发送一次,然后再用button发送就出错了,
用的INDY10.0.52版的 Idtcpserver和Idtcpclient


function acsend(st:string):Boolean;
var
Acontext:TIdContext;
begin

AContext.Connection.Socket.WriteLn(st);

end;

procedure TForm1.TcpsConnect(AContext: TIdContext);
begin
acsend(mmo1.Text);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
acsend(mmo1.Text);//这里点了就出错了,那个acc..什么的错误.
end;



目的就是服务器端点按钮之后发送mmo1.text的内容
...全文
133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Princezhouf 2009-07-14
  • 打赏
  • 举报
回复
你要用Locklist 那你就要再用过之后 把这个Lock给解掉。

这是服务器端要做的。而且,Indy demo包中的例子里面都是设置了一个结构体,然后,通过自己够早的结构体List来存储线程的内容。当给指定的机器发送消息的时候,直接从结构体里面找出对应的线程,并对其发送消息。

当然,不考虑程序的效率和安全性,完全可以For循环或者广播信息,将识别用户的任务交给客户端。

然后,还要注意,在客户端要建立一个进程,时刻捕捉发过来的消息。同时,在客户端建立一个String的List,用来存放消息队列。而且,还要设置一个Timer,间隔就是1ms,对这个List的Stirng进行读写操作。

如果不按照这个流程来做,很多弊病都会出来。有时候莫名其妙的错误也会出来。
adamsun 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 walllacecn 的回复:]
那高分求一个完整的例子, 要求TCP连接服务器和客户端可以即时互发消息的,INDY10.0.52的.
现在通过修改已经可以发送出去和接受到,问题在如何处理同步上面.
最好讲讲首先,服务器开启,然后客户端发起连接,之后服务端返回XX连接成功,然后客户端接受到返回信息提示连接成功,然后服务器端和客户端可以互相发送STRING
[/Quote]

indy10官方demo包:http://indy.fulgan.com/ZIP/Indy10demo.zip
walllacecn 2009-06-15
  • 打赏
  • 举报
回复
?procedure TForm1.TcpsConnect(AContext: TIdContext);
begin
acsend(mmo1.Text);
end;

这也没创建可以执行啊.
shuihan20e 2009-06-15
  • 打赏
  • 举报
回复
你没有创建TIdContext不出错才怪
walllacecn 2009-06-15
  • 打赏
  • 举报
回复
function acsend(st:string):Boolean;
var
Acontext:TIdContext;
begin

AContext.Connection.Socket.WriteLn(st);

end;
这样写的啊
shuihan20e 2009-06-15
  • 打赏
  • 举报
回复
acsend你咋写的?
walllacecn 2009-06-15
  • 打赏
  • 举报
回复
啊刚没注意,分数少了再加..
walllacecn 2009-06-15
  • 打赏
  • 举报
回复
客户端和服务器端建立连接后,会在Contexts.LockList里存在一个ID,可以用循环发给每个ID的客户端,相当于广播.
问题是现在客户端和服务器连接之后,如何处理服务器端发送过来的数据,客户端的处理函数是idclient.iohandle.readln();问题是已经存在一个连接之后如何在当前连接里面实现双工通讯,按照现在来看至少在另外一个线程里面是可以接受到的.也就是把处理函数放入线程中执行.
shuihan20e 2009-06-15
  • 打赏
  • 举报
回复
indy10我没怎么用过,这个参数TIdContext应该是和indy9里的TIdPeerThread类似吧
连接时,你能够发送成功,是因为你发送给了刚刚连接成功的那个客户端,而你写的过程中没有实例话,访问了没有实例化的对象,自然会报错
你即使实例化了,也会报错,因为它根本不知道你人发送给哪个客户端数据
hxl126 2009-06-15
  • 打赏
  • 举报
回复
UP,我来学习的
walllacecn 2009-06-15
  • 打赏
  • 举报
回复
那高分求一个完整的例子, 要求TCP连接服务器和客户端可以即时互发消息的,INDY10.0.52的.
现在通过修改已经可以发送出去和接受到,问题在如何处理同步上面.
最好讲讲首先,服务器开启,然后客户端发起连接,之后服务端返回XX连接成功,然后客户端接受到返回信息提示连接成功,然后服务器端和客户端可以互相发送STRING
chain0509 2009-06-15
  • 打赏
  • 举报
回复
不是太清楚 不过给你UP
yuyuhaso 2009-06-15
  • 打赏
  • 举报
回复
明确的告诉你,创建了也发不出去
yuyuhaso 2009-06-15
  • 打赏
  • 举报
回复
……
AContext.Connection是个什么东西你都没说嘛,不错见鬼了

1,593

社区成员

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

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