用Java实现客户机-服务器套接字通信协议

用Java实现客户机-服务器套接字通信协议,java,android,sockets,Java,Android,Sockets,我正在为Android开发一款多人回合游戏——一款扑克游戏。 我的克林特游戏快结束了。现在我需要实现多人游戏 我曾想过使用Web服务,但我没有这方面的经验,我认为套接字通信更快 我有一些用Java编写套接字通信的经验: 使用ObjectOutputStream和ObjectInputStream交换数据(本例中为游戏状态和回合动作) 但我担心这种方法——服务器端依赖于平台。 如果我想让iPhone开发人员为iPhone创建应用程序,他不能这样做,因为服务器需要Java代码。我说得对吗 请回答另一

我正在为Android开发一款多人回合游戏——一款扑克游戏。 我的克林特游戏快结束了。现在我需要实现多人游戏

我曾想过使用Web服务,但我没有这方面的经验,我认为套接字通信更快

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

但我担心这种方法——服务器端依赖于平台。 如果我想让iPhone开发人员为iPhone创建应用程序,他不能这样做,因为服务器需要Java代码。我说得对吗

请回答另一个问题: 我是否可以实现正常的套接字通信,然后在以后轻松地将其更改为安全的套接字通信?只是我需要学习如何使用SSL,我现在不想进入这个领域


谢谢

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

至于SSL套接字,我也在这样做:)我开始使用非SSL套接字,然后进行重构,使其与SSL套接字一起工作。我很惊讶这是多么容易。我建议将此git回购用于示例代码:


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

当然,一个简单的基于HTTP的协议会更容易。在任何情况下,“套接字”都不依赖于平台。套接字在某些协议调用中需要数据。套接字不“需要Java代码”。如果服务器需要一个自定义对象(ObjectInputStream.in(CustomObject)),那么从客户端,我必须在Java中使用ObjectInputStream.out(CustomObject)。自定义对象在ObjectVec中的编写方式可能有所不同。如果要序列化对象,请确定。这只是通过套接字传输数据的一种方法。套接字期望数据;您可以定义您发送和期望接收的数据,以及在获得数据后如何处理这些数据。否。服务器应该是独立于平台的。而服务器大多是。客户端采用服务器强制执行的协议。@greenapps,我想协议是我的问题。在我以前的项目中,客户机只发送了一个requestCode(int),服务器发送回数据,而客户机需要特定的对象。没有强制执行任何东西的协议。。您能否提供一个链接来解释如何为客户“采用”协议?它还将确保客户不知道他们在与谁交谈,因此没有真正的安全性。@EJP不确定您的意思。你能详细说明一下吗?他们可以提供自己的证书,由经过验证的提供者签名。我也可以提供一个作为应用程序的一部分(我确实计划在jar上签名),但是世界上任何使用该应用程序的人都可以连接到任何网络上的任何计算机,因为他们都使用相同的证书。你认为什么会更好?