Java 没有服务器的客户端-客户端通信?

Java 没有服务器的客户端-客户端通信?,java,sockets,server,client,Java,Sockets,Server,Client,我对套接字编程还不熟悉,我需要澄清一些事情 在两个客户端通信之间是否需要服务器?让我解释一下我的意思: 例1: 客户端1:服务器,我想和客户端2通话 服务器:没问题。让我们等到他发出连接请求 客户2:我来了。我想和客户谈谈 服务器:好的客户端1这是客户端2的IP地址。给你的客户2,这是 客户端1 IP地址。你现在可以不用我跟对方说话了 例2: 客户端1:服务器,请向客户端2发送消息:“嗨,客户端2,你好吗?” 服务器:好的,没问题。正在向客户端2发送消息 客户端2:服务器感谢您发送客户端1的消息

我对套接字编程还不熟悉,我需要澄清一些事情

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

例1:

  • 客户端1:服务器,我想和客户端2通话
  • 服务器:没问题。让我们等到他发出连接请求
  • 客户2:我来了。我想和客户谈谈
  • 服务器:好的客户端1这是客户端2的IP地址。给你的客户2,这是
  • 客户端1 IP地址。你现在可以不用我跟对方说话了

    例2:

  • 客户端1:服务器,请向客户端2发送消息:“嗨,客户端2,你好吗?”
  • 服务器:好的,没问题。正在向客户端2发送消息
  • 客户端2:服务器感谢您发送客户端1的消息。给他回复:“嘿,我很好。”
  • 服务器:向客户端发送消息1
  • 所以我的问题是:在您遇到两个客户端之后,您是否需要一个服务器来在它们之间进行通信?还是我完全走错了路

    编辑:


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

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


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

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

    编辑:

    不过我还是更喜欢TCP而不是UDP,因为它们特别可靠


    在多人游戏的情况下,您的客户端仍然需要通过专用套接字连接到服务器。由于您必须使用TCP,服务器可以负责在客户端id为的客户端之间发送消息。

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


    如果您阅读更多关于XMPP的内容,您可能会发现有用的信息。

    要将Kevin Kal所说的话转化为答案: 不,Client1Client2之间不一定需要服务器来进行对话。如果您在示例中使用服务器将必要的数据(IP和端口)发送到Client1Client1可以通过套接字Client2连接到Client2(正如Kevin所说,严格地说,这会使Client2进入服务器。)

    如果您想更多地了解java中的客户端到客户端连接,这里有一个非常好的答案来回答类似的问题:


    是的,您可以使用点对点通信,不需要任何中央服务器,也可以使用socket,也可以使用用户ip地址进行通信

    参考号

    这实际上取决于你想要达到的目标。在很多情况下,你需要一个服务器将数据从a发送到b。另外,只有其中一个客户端监听连接时,两个客户端才能连接,但这使它成为一个服务器。我想将我的游戏扩展为多人游戏。这是一个非常简单的游戏。我只需要在client1手机中显示client2,反之亦然。我相信在好的ole mirc程序(典型的客户机-服务器应用程序)中,有可能在两个客户机之间建立直接连接。所以服务器为地址簿做了更多的工作。所以,是的,你可以这样做。我认为主要的问题是,在一个客户面前是否有一个支持者。请看一看“您不能从其他客户端连接到一个客户端上的端口”。。。在UDP中,您没有“连接”。。。我猜你只是在想TCP…是的。我谈论的是用于多玩家编程的TCP套接字。在上面的示例中,在同一个程序中启动了多个客户端。在当前问题中,客户端将从多个设备启动