现在看了很多帖子,关于IdTcpServer的问题。但是都说它是什么不能主动发消息给客户端,就是在它得OnExcute中实现AThread.Connection.socket.Writeln('要发送得数据').没有一个象样得源代码。(要不就是去那个什么英文网站看demo)。可是我英文水平有限啊。所以在这里再次发帖。
我的问题是这样的:
我做了一个TCPServer服务器,有多个客户端和我进行连接,并且我把这些客户端的IP和Port都记录下来了。代表它们上线了。一旦下线我就会把相应得IP和Port删除。我想得到的答案:在我注意我的服务器端时,可能有若干在线客户端在线,所以,我想主动发送一些消息给我选择得客户端。当我选择我要发送得客户端时会弹出一个窗口,在窗口上面有一个TMemo和一个TButton,TMemo用来书写我要发送的消息,TButton代表我点击它时发送TMemo中的数据给我要发送的那个客户端。注意:希望高手们给出我源代码,怎么样实现我得服务器主动的发消息给我对应的客户端。再次谢谢。

解决方案 »

  1.   

    try
        Count := Clients.lockList.Count;
      finally
        Clients.UnlockList;
      end;
       try
          EnterCriticalSection(CS);
          for I := 0 to Count - 1 do
            try
              RecClient := Clients.LockList.Items[i];
              Recthread := RecClient.Thread;
              sendStr :='发送的内串';
                if Recthread.Connection.Connected then
                  Recthread.Connection.WriteLn(sendStr);
              end;
            finally
              Clients.UnlockList;
            end;
        finally
          LeaveCriticalSection(CS);
        end;
      

  2.   

    你可以在Clients记录你的客户IP和线程头,然后在CLIENTS中用IP找到它的线程头就可以对指定的客户发送了,也可以广播,不明白再说
      

  3.   

    Server也可以有Client的功能,Client也可以有Server的功能,你可以调整一下思路