首页 文章

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

提问于
浏览
1

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

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

例1:

  • Client1: 服务器,我想和client2交谈

  • Server: 没问题 . 让我们等到他发送连接请求

  • Client2: 我在这里我想和client1交谈 .

  • Server: 好的Client1这里是Client2的IP地址 . 对于你Client2,这里是

Client1 IP地址 . 你现在可以在没有我的情况下互相交谈 .

例2:

  • Client1: 服务器,请向client2发送消息:"Hey client2. How are you?"

  • Server: 好的没问题 . 向client2发送消息

  • Client2: 服务器感谢发送client1的消息 . 给他回复:"Hey, I'm fine."

  • Server: 向client1发送消息..

所以我的问题是:在你遇到两个客户在他们之间进行通信之后,你需要一台服务器吗?或者我的轨道完全错了?

EDIT:

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

3 回答

  • 0

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

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

  • 0

    把凯文·卡尔所说的回答:不,你不一定需要服务器 Client1Client2 互相交谈 . 如果您使用示例中的服务器将必要的数据(IP和端口)发送到 Client1Client1 可以通过套接字 Client2 监听连接到 Client2 (正如凯文所说,严格来说,这会使 Client2 进入服务器 . )

    如果您想了解更多有关Java中客户端到客户端连接的信息,这里有一个类似问题的答案:

    Connect two client sockets

  • 0

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

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

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

    编辑:

    我仍然更喜欢TCP over UDP这些reasons尤其是可靠性

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

相关问题