客户端 - 没有服务器的客户端通

时间:2015-09-17 13:02:40

标签: java sockets server client

我是socket编程的新手,我需要澄清一些事情。

您是否需要两个客户端通信之间的服务器?让我解释一下我的意思:

示例1:

  1. Client1:服务器,我想与client2交谈
  2. 服务器:没问题。让我们等到他发送连接请求
  3. Client2:我在这里。我想和client1谈谈。
  4. 服务器:好的Client1这里是Client2的IP地址。对于Client2,这是
  5. Client1 IP地址。你现在可以在没有我的情况下互相交谈。

    示例2:

    1. Client1:服务器,请向client2发送一条消息:"嘿client2。你好吗?"
    2. 服务器:好的没问题。向client2发送消息
    3. Client2:服务器感谢发送client1的消息。给他回复:"嘿,我很好。"
    4. 服务器:向client1发送消息..
    5. 所以我的问题是:在你遇到两个客户在他们之间进行通信之后,你需要一台服务器吗?或者我走错了轨道?

      修改

      这背后的目的是我希望将我非常简单的手机游戏扩展为多人游戏。例如,我想在PACMAN1手机上显示PACMAN2,反之亦然。

4 个答案:

答案 0 :(得分:1)

是的,您可以进行对等通信而无需任何中央服务器,也可以使用sockect或可以与用户ip地址进行通信。

参考 peer to peer

答案 1 :(得分:0)

如果您使用的是TCP套接字编程,则需要中央服务器来促进客户端之间的通信。

原因 - 您无法从每个其他客户端连接到一个客户端上的端口。所有客户端都可以连接到特定端口上的一台服务器,服务器可以促进客户之间的通信。

如果您不再使用套接字编程并使用Messaging等高级功能;可以实现对等通信和向多个客户端广播消息。

编辑:

对于这些reasons特别是可靠性

,我更喜欢TCP over UDP

在多人游戏的情况下,您的客户仍然需要连接到专用插槽上的服务器。由于您无论如何都必须使用TCP,因此服务器可以负责在具有客户端ID的客户端之间发送消息。

答案 2 :(得分:0)

理论上可以让两个客户端应用程序直接通信,这可以在局域网中工作,但实际上不太可能。这不起作用的主要原因是在许多情况下,服务器“看到”的客户端1 /客户端2的IP地址实际上是客户端1 /客户端2的网络网关的IP地址,这意味着客户端1无法启动与客户端的连接2.此外,您可以在客户端2计算机(或其网络)上安装防火墙,阻止从客户端1启动的连接。

如果您在XMPP上阅读更多内容,可能会找到有用的信息。

答案 3 :(得分:0)

将Kevin Kal所说的回答: 不,您不一定需要服务器 Client1 Client2 相互通信。如果您使用示例中的服务器将必要的数据(IP和端口)发送到 Client1 Client1 可以通过套接字连接到 Client2 Client2 会倾听(正如凯文所说,严格来说,这会使 Client2 进入服务器。)

如果您想了解有关Java中客户端与客户端连接的更多信息,这是对类似问题的一个非常好的答案:

Connect two client sockets