Indy局域网聊天,上线后如何通知各Client端知道呢?查了半天资料,也没有搞明白是怎么回事

解决方案 »

  1.   

    首先,定义一个全局的记录和指针,在TCPServerExecute事件中,拦截连接的信息
    with AThread.Connection do .....,
    使用上述的记录来存放新连接客户端的地址等信息,并循环记录的个数,用该指针对已经连接的客户端进行通讯,逐个通知该通知的客户。
      

  2.   

    var
      Alist: Tlist;
      i: Integer;
    begin
      Alist := IdTCPServer1.Threads.LockList;
      for i := 0 to Alist.Count-1 do
      begin
        TIdPeerThread(Alist.Items[i]).Connection.WriteLn('12345678');
        //TIdPeerThread(Alist.Items[i]).Connection.WriteInteger(i);
      end;
      IdTCPServer1.Threads.UnlockList;
      

  3.   

    谢谢大家。
    TIdPeerThread(Alist.Items[i]).Connection.WriteLn('12345678');
    这个函数是Server向Client端发数据吧?Client端怎么才能接收到呢?通常都是Client主动向Server发数据,然后等待接收数据。
      

  4.   

    广州仔你好,过客的代码就是你提到的“用该指针对已经连接的客户端进行通讯,逐个通知该通知的客户。”吧?Cliend端的哪个事件将被这个Server端的通知触发?
      

  5.   

    Client一直连接着server,你肯定要有个线程一直在读的,没有单独的事件
      

  6.   

    每个Client端都放一个Server控件,用来接收消息,之前点对点的就这么做过。
      

  7.   

    局域网你就玩UDP吧,用广播就可以了,要不然还得做服务器。
    你可以参考一下飞鸽的源码,里面什么都有了
      

  8.   

    局域网做个服务器 用数组保存 socket 连接 
    服务器 对所有的socket连接广播就行了我这里有个样例 要看么