我想用socket做一个聊天的工具,现碰到三个问题望各位大哥们帮帮忙,小弟万分感谢!问题一:服务断如何向指定的客户端发送信息,例如192.168.0.1是服务端(ServerSocket1),而192.168.0.2和192.168.0.3是客户端,如果服务端只向192.168.0.2这台机器发送信息该如何实现!(我在网上看的例子都是群发给客户端的,不是发给指定客户端,我想能不能通过指定客户端ip直接向某一台客户端发信息,如何实现)
问题二:如果我想用客户端直接发信息给客户端 例如 192.168.0.2直接发给192.168.0.3该如何实现(我想是不是应该先发送给服务端,在由服务端转发给另一台客户端呢?具体该如何实现),给个思路也行!
问题三:客户端如何能够得到所有连接到服务端IP(我在服务端已经可以实现了,但我不知道客户端如何实现),其实我的目的是想在客户端能够即时查看所有在线用户!以上三个问题困扰小弟很多天了,麻烦各位大哥指教,小弟万分感谢!

解决方案 »

  1.   

    问题一 var
      I: Integer;
    begin
      ServerSocket1.Socket.Lock;
      try
        for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
          if ServerSocket1.Socket.Connections[i].RemoteAddress = '192.168.0.2' then
             ServerSocket1.Socket.Connections[i].SendText(MessageText);
      finally
        ServerSocket1.Socket.Unlock;
      end;
    end;问题二
    正如楼主说的,先发一个命令告诉服务器,要发送给谁,服务器再用问题一的解决代码来发送问题三
    发送一个命令给服务器,服务器根据命令要求,把列表发送客户端
      

  2.   

    to unsigned 
    呵,之前我也想过用你这种方法来实现,但问题二用你所说的问题一来解决,如果客户端有几百台电脑的话用循环来判断那服务器负荷非常重,特别是当上百台电脑同时通信的时候服务器该如何响应呢?能不能不用通过循环判断而直接发送呢?麻烦再帮我想想,万分感谢!
      

  3.   

    ..直接P2P吧. ,,非得C-S-C吗?
      

  4.   

    呵,前两个问题我按照unsigned的方法正在测试中,非常感谢unsigned!但第三个问题还未解决,那位大哥能告知小弟,我想要的是在客户端能够即时查看所有在线用户! 问题三:客户端如何能够得到所有连接到服务端IP(我在服务端已经可以实现了,但我不知道客户端如何实现),其实我的目的是想在客户端能够即时查看所有在线用户! 
      

  5.   

    楼主可以看看INDY的那向个例子,有个Chat还有一个IDTCPDEMO,你会明白一些另外学习下线程的知识
      

  6.   

    3个问题都比较简单,看看p2p chat的源码,盒子下载,我最近也在弄这个,呵呵,所以和楼主有一样的感受,lz一定要看看