2011-03-27 119 views
0

我尝试实现一个Java聊天程序。在这个程序中,多个客户端将通过服务器相互通话。服务器会将来自客户端的消息中继到另一个客户端它还将提供更新到好友列表。从概念上讲,实现此即时通讯聊天的最佳途径是什么。我遇到的问题是将服务器中继消息从一个客户端发送到另一个客户端。每个客户端也应该能够选择他们想要交谈的人。再一次,服务器的唯一目的是从一个客户端获取消息并将其发送到另一个客户端。如果一个客户端连接到服务器,则直到另一个客户端连接才会发生。然后两个客户开始相互沟通。Java多客户端即时通讯软件概念帮助

+1

恐怕你需要比这更具体。你到底有什么问题?处理实际的网络I/O?用什么数据结构来存储客户端元数据?设计您将使用的协议? – biziclop 2011-03-27 23:11:07

回答

0

你需要想出实现一个协议;退房XMPP。问题的一部分是确定您将要发送消息的其他用户。 XMPP有助于解决这个问题。我建议每个连接到服务器的用户都有一个线程来处理连接。然后,您可以将所有线程存储到HashMap中,其中的密钥将是用户名。然后只需将消息推送到将消息发送给客户端的线程实现。

+0

所以我应该将客户端服务器连接存储在一个表或列表中,但一个客户端将如何与另一个客户端进行通信? – Delanoy 2011-03-27 23:30:23

+0

他们不直接与对方通话,他们与服务器交谈,服务器跟踪消息需要发送到的位置。因此,用户A向服务器发送消息“发送给用户B”,然后服务器看到用户B已连接并发送消息“用户A说”。 – jmichalicek 2011-03-27 23:50:14

+0

@Delanoy:客户端A会向服务器发送XMPP消息;服务器会查看它连接的客户端HashMap(或ArrayList或LinkedList或某些容器类型(如果您想要将其中一个),以查找客户端B.如果成功,服务器会将新消息推送到客户端B的队列中,并将收据发送回客户端A.如果不成功,服务器可以向客户端A发送故障。注意:当我说服务器查找客户端B它正在寻找客户端B连接的服务器中的线程。 – Suroot 2011-03-28 02:01:52

0

对于你将要在以下特征的基本的聊天系统:

  1. 客户端登录到服务器。这使您可以识别客户端并为每个客户端保留好友列表。
  2. 客户端只向客户端发送消息。
  3. 客户端只接收来自服务器的消息。
  4. 每封邮件必须标识以下内容:
    1. 邮件的收件人。
    2. 消息的来源。
    3. 该消息的文本。
    4. 也许;消息发送的时间和日期。
  5. 服务器需要跟踪对话;基本上是客户端对的列表。
  6. 如果您想进行群组聊天,那么转换将成为客户端列表。
  7. 当客户端向服务器发送消息时,服务器应该将其转发给作为对话一部分的所有其他客户端。
  8. 您可能希望让服务器记录所有对话。
  9. 您至少需要2种消息类型;文本(即聊天)和邀请。