2014-03-06 162 views
2

我打算创建一个聊天消息应用程序,其中两个或多个客户端可以通信,但我有点困惑。JAVA套接字客户端到客户端通信

  1. java是否可以通过套接字与客户端进行客户端通信?
  2. 套接字通信是否需要服务器?
  3. 有可能一个客户站在通信服务器上吗?
  4. 您有任何客户端与客户端通信的教程吗?
  5. 如果通信需要一个服务器,客户端A可以看到客户端B的消息?

回答

3

客户端到客户端通信不使任何意义,因为一旦系统开始接收消息时,它被称为服务器,所以在沟通应该有一个服务器和客户机到别的沟通的情况会是怎样的两个人说话,他们都没有听。

客户端A可以充当服务器和客户端,因此客户端B, 两者都可以通过两种方式进行通信,即发送和接收信息。

+0

如果客户端C /客户端D进来,该怎么办?这个想法改变了吗? –

+0

如果数字增加,同样的事情将适用。 –

1

是的,Java可以使用套接字。 例如,“正式”的教程从Oracle:http://docs.oracle.com/javase/tutorial/networking/sockets/

但随着插座工作直接需要大量的用于编码/解码消息的代码从/到一个二进制形式,数据流为逻辑“包”中分离,处理线程和消息队列等等。幸运的是,有网络库使得这个过程变得更加简单。我会推荐Netty:http://netty.io/

关于客户端/服务器关系。如果我们正在谈论TCP/IP,那么是的。一方(服务器)总是监听连接,另一方(客户端)打开与服务器的连接。

但是,如果您使用UDP,则从网络的角度来看,所有参与者都是平等的。他们只是发送和接收UDP数据包。

回到您的聊天应用程序:最简单的解决方案 - 所有客户端连接到专用服务器。每个聊天消息都包含客户端ID。当服务器收到该消息时,它将其发送给具有指定标识的客户端。因此,每个客户都可以将消息传递给每个其他客户。服务器作为“调度员”工作。

+0

更能解释UDP的概念吗?我想创建一个不需要服务器的聊天应用程序。你有什么教程/文件吗? –

+0

这里是UDP教程:http://docs.oracle.com/javase/tutorial/networking/datagrams/但是当谈到“无服务器”环境时,你应该回答的第一个问题是(“你自己)应该如何让客户知道彼此”?他们如何发现有另一个客户愿意加入聊天? – Deinlandel

+0

我不确定是否会有数据库将用户连接到对方? –

0

如果您需要简单的方法,您可以尝试https://httprelay.io服务。你需要的仅仅是HTTP客户端,而不需要外部库。