对于这种多点传送的问题
使用udp协议
如果你手边有清华大学那本<<java编程基础>>
里面有相应内容

解决方案 »

  1.   

    对于A机来说,是再一般不过的TCP服务器写法.....
    它用不用多线程随使你,不过建议你用.对于B机来说,你的那些客户端是怎么同B机上程序通讯的??
    Socket? COM? WINDOWS消息? 消息队列?Web Services?
    数据库存贮转发?
    到底是哪一种?
      

  2.   

    B机对客户端最好用多线程,如果安排得当,你根本不用考虑A机对哪个客户机的问题,因为每一个线程都保持了一个客户端和A机的通讯
      

  3.   

    不用多线程也可以.我前几天帮一个同学写作业,
    写的是一个聊天程序,用的就是client/server.
    客户端所有发送的消息都通过server转发.
    同时服务端保持同所有客户的连接.
    为了判定是应该向哪个客户socket发送消息,
    信息中必须包含有目的端socket的ip和port,
    然后在serversocket的connection中查找.方法比较笨,但只是为了学习.真正的写这种聊天程序,应该用udp,而不是用tcp.
      

  4.   

    你的B机上一定至少有一个serverSocket接受客户端的连接,每当有一个客户端连接到B机,serverSocket.Socket.Connections中就增加一个连接。
    每当B机中接受到一个连接后,你应当创建一个ClientSocket,并用它连接到A机。
    我这里有一个简单的例子,如果要的话,告诉我Mail
      

  5.   

    请看
    http://www.csdn.net/expert/topic/800/800628.xml?temp=.1855432
    我想可以通过服务端转发的方法。
      

  6.   

    看了你的问题,不是很明白。
    你的思路是说所有客户端的连接是先由b接管,然后b和a
    动作,最后将结果返回给客户端。
    1.当众客户端同时对我进行通信时我如何区分,在这里要不要多线程,如何实现?
    -----------
    b将会是一个serversocket,(A做成server或client是无所谓的),当任何一个客户端连接b时OnGetThread: TGetThreadEvent事件发生,事件参数
    Sender: TObject;  ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);其中
    TServerClientThread是一个var参数,它代表为当前连接所开辟的线程。
    你可以在这里创建自己的线程实例。对于区分不同客户端,我建议你不用使用socket的机制,而是与你自己的业务系统相关(也是必然的吧),比如你在传输的数据包中加一个用户id。
    -------
    2.众客户端的数据存取请求由B机转发给A服务器处理的过程要不要用多线程,如何实现?如何把A服务器的结果正确地返回给众客户端?
    ------
    “由B机转发给A服务器处理的过程要不要用多线程”--我觉得是一定要用的。不过既然你要通过b来做中间层。又打开了与连接b同样多的线程去连接A,好像有点不好。对于你说的“而我必须考虑安全,...”我觉得应该有别的办法解决。
    最后“如何把A服务器的结果正确地返回给众客户端”这个问题就只有你自己能回答了。置于你怎么组织数据,客户端怎么解析。还是更具体数据结合考虑。但相同的是,tcp是可靠连接,只能出现连接失败、成功、超时。不会丢数据。
    对了,serversocket要设置成阻塞模式。呵呵
    下面是有关delphi的文档,虽然borland的文档比较烂,但倒也不是一无是处。
    -------------
    TCustomServerSocket.::OnGetThread
    Occurs when the server socket needs to create a new execution thread for a connection to a client socket.
    --------------------
    Writing client threads
    To write a thread for client connections, define a new thread object using the New Thread Object dialog. The Execute method of your new thread object handles the details of reading and writing over the thread connection. It creates a TWinSocketStream object, and uses that to read or write. For example:...
    ------
    还有一些你就自己查吧。 ------