如何在 iOS 和 Android 之间进行游戏交流
How to communicate between iOS and Android for a game
我读了几篇文章,但它们要么没有回答我的问题,要么太旧了。
假设我想开发一个纸牌游戏应用程序,我需要设备在它们之间即时进行通信。此外,我只需要一个 本地连接 。人们会在同一个房间里玩。
那么将所有这些设备(iOS、Android 和 tablet/smartphone)组合在一起的选项是什么?
WIFI、蓝牙、其他...
非常感谢
实现此目的的最佳方法是使用套接字。您可以在一台设备上打开一个 TCP 套接字,其他设备可以侦听此套接字。然后您可以使用 JSON 将消息从一台设备发送到另一台设备。对于套接字,您可以使用 iOS 和 Android 中的本机套接字,或者您可以寻找像 Socket.IO
这样的库
如果大家都在WiFi,那就用socket,最简单。蓝牙需要近距离,所以不太理想。
您将有两个方面需要解决:
1) 寻找网络上的其他玩家
为此,我将使用 UDP 消息。让您的应用程序在众所周知的端口上打开一个 UDP 套接字,并将其注册到 运行 循环中。在寻找其他玩家时,并且可能定期使用计时器,让您的应用向网络广播地址和您的游戏端口发送 UDP AnybodyOutThere 类型的消息。在此消息中编码播放器信息和您要使用的任何其他内容。
如果您希望您的应用程序发送到该应用程序,您也可以创建一个多播组。
当您的应用收到 UDP AnybodyOutThere 消息时,对其进行处理,然后将 ImHere 类型的消息直接发送给发件人并记录他们的 IP 地址。
当您的应用收到 UDP ImHere 类型的消息时,将播放器添加到您的内部播放器列表并记录他们的 IP 地址。
通过这种方式,您的所有设备都将快速了解游戏中的玩家。
2) 在玩游戏期间在设备之间进行通信。
为了可靠性,您可能希望对这部分使用 TCP/IP 套接字。让您的应用程序在众所周知的端口(不同于您的 UDP 端口)上打开 TCP 侦听套接字。您实际上可以使用任何端口,只要您在步骤 1 中的 UDP 发现消息中包含该端口即可。
要请求玩家加入您在一台设备上托管的游戏,请让该设备通过 UDP 直接向所选玩家发送邀请。如果他们选择加入,请让他们的设备使用 TCP 套接字连接到设备正在侦听的端口上的托管设备。您现在有任何加入的玩家可靠地连接到您的托管设备。
剩下的就是您创建一个协议来管理游戏所需的交互。
我读了几篇文章,但它们要么没有回答我的问题,要么太旧了。 假设我想开发一个纸牌游戏应用程序,我需要设备在它们之间即时进行通信。此外,我只需要一个 本地连接 。人们会在同一个房间里玩。
那么将所有这些设备(iOS、Android 和 tablet/smartphone)组合在一起的选项是什么? WIFI、蓝牙、其他...
非常感谢
实现此目的的最佳方法是使用套接字。您可以在一台设备上打开一个 TCP 套接字,其他设备可以侦听此套接字。然后您可以使用 JSON 将消息从一台设备发送到另一台设备。对于套接字,您可以使用 iOS 和 Android 中的本机套接字,或者您可以寻找像 Socket.IO
这样的库如果大家都在WiFi,那就用socket,最简单。蓝牙需要近距离,所以不太理想。
您将有两个方面需要解决:
1) 寻找网络上的其他玩家
为此,我将使用 UDP 消息。让您的应用程序在众所周知的端口上打开一个 UDP 套接字,并将其注册到 运行 循环中。在寻找其他玩家时,并且可能定期使用计时器,让您的应用向网络广播地址和您的游戏端口发送 UDP AnybodyOutThere 类型的消息。在此消息中编码播放器信息和您要使用的任何其他内容。
如果您希望您的应用程序发送到该应用程序,您也可以创建一个多播组。
当您的应用收到 UDP AnybodyOutThere 消息时,对其进行处理,然后将 ImHere 类型的消息直接发送给发件人并记录他们的 IP 地址。
当您的应用收到 UDP ImHere 类型的消息时,将播放器添加到您的内部播放器列表并记录他们的 IP 地址。
通过这种方式,您的所有设备都将快速了解游戏中的玩家。
2) 在玩游戏期间在设备之间进行通信。
为了可靠性,您可能希望对这部分使用 TCP/IP 套接字。让您的应用程序在众所周知的端口(不同于您的 UDP 端口)上打开 TCP 侦听套接字。您实际上可以使用任何端口,只要您在步骤 1 中的 UDP 发现消息中包含该端口即可。
要请求玩家加入您在一台设备上托管的游戏,请让该设备通过 UDP 直接向所选玩家发送邀请。如果他们选择加入,请让他们的设备使用 TCP 套接字连接到设备正在侦听的端口上的托管设备。您现在有任何加入的玩家可靠地连接到您的托管设备。
剩下的就是您创建一个协议来管理游戏所需的交互。