在Java中实现客户端 - 服务器套接字通信的协议

时间:2015-03-29 16:04:25

标签: java android sockets

我正在开发一款针对Android的多玩家回合制游戏 - 一款扑克游戏。 我几乎完成了clinet游戏。现在我需要实现多玩家的事情。

我考虑过使用Web服务,但我对此没有经验,而且我不认为套接字通信速度更快。

我在使用Java编写套接字通信方面有一些经验: 使用ObjectOutputStream和ObjectInputStream交换数据(在这种情况下,游戏状态和转动动作)。

但是我对这种方法很担心 - 服务器端依赖于平台。 如果我想让iPhone开发人员为iPhone创建应用程序,他就无法做到这一点,因为服务器需要Java代码。我是对的吗?

还有一个问题: 我可以实现普通套接字通信,然后轻松将其更改为安全套接字通信吗?只是我需要学习如何使用SSL而我现在不想进入它。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但对我来说很有意义,希望其他人也这么认为。我目前正在使用Java套接字处理涉及不同平台上的多台计算机的项目。我使用套接字是因为最终我可以使用任何语言,只要我遵守我写的协议。我也有一些预定义的整数常量来控制按什么顺序预期的数据。例如,在我启动某个特定函数之前,我发送一个特定的整数,然后是预期的数据。任何不按预期顺序进入的内容都会导致错误。因此,只要语言/运行时提供了通过TCP套接字写入整数和字符串的能力,它就可以工作。我认为这涵盖了绝大多数主要的编程语言。

对于SSL套接字,我也这样做:)我开始使用非SSL套接字,然后重构以使其与SSL套接字一起使用。我很惊讶它是多么容易。我建议使用这个git repo来获取示例代码:https://github.com/jawi/ssl-socket-demo

最终,我计划让使用我的应用的用户在首次运行应用时在本地生成密钥库和自签名证书,作为其初始设置的一部分。只要他们将相同的密钥库导入到他们在网络中使用的每个其他节点上的应用程序中,他们就能够相互通信。这将确保以对其网络唯一的方式加密通信。当然,这将要求他们将密钥库文件安全地存储在其本地文件系统中:)