java - 在 Java 中实现客户端-服务器套接字通信协议(protocol)

标签 java android sockets

我正在为 Android 开发一款多人回合制游戏 - 扑克游戏。 我快完成客户端游戏了。现在我需要实现多人游戏。

我考虑过使用 Web 服务,但我没有这方面的经验,而且我知道套接字通信更快。

我有一些用 Java 编写套接字通信的经验: 使用 ObjectOutputStream 和 ObjectInputStream 交换数据(在本例中为游戏状态和回合 Action )。

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

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

谢谢!

最佳答案

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

对于 SSL 套接字,我也在这样做:) 我开始使用非 SSL 套接字,然后进行重构以使其与 SSL 套接字一起使用。我很惊讶它是多么容易。我会推荐这个 git 存储库作为示例代码:https://github.com/jawi/ssl-socket-demo

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

关于java - 在 Java 中实现客户端-服务器套接字通信协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331423/

相关文章:

java - 如何使用 Maven 添加 Spring 库

java - 访问外部类这个实例

java - java泛型中声明类型void的目的

Android 和 HDMI CEC

python - 客户端断开Python连接时保持服务器打开

java - Jruby+swt。无法在亚马逊服务器上执行应用程序

java - 无法从 xml 文件膨胀relativelayout

android - 在 recyclerview firebase 中转换 arraylist

Java - 关闭套接字会产生不同的结果

java - 多线程socket通信场景