java - 套接字通信协议(protocol)/标准

标签 java c++ sockets

<分区>

我正在从事一个涉及多台计算机上的多个应用程序的项目。主应用程序是运行在 CentOS 服务器上的 C++ 套接字服务器,客户端应用程序是运行在客户端 PC 上的 Java 程序。

这些将使用套接字来回通信。我已经定义了一组命令和参数,他们需要实现这些命令和参数才能支持所有内容。

我想了好几个选项,但我似乎找不到最完美的一个..

  • C++ 和 Java 程序是否应该编写自己的类/解析器来验证消息?
  • 我应该创建一个定义所有通信消息的 XML 文件(通过 HTTP 提供服务)吗? (服务器/客户端将为其解析和创建操作)
  • 或者使用某种第三方库(Google Protocol Buffers?)

重点是当Socket服务器发送消息X时,客户端必须知道如何处理它。同样适用于另一个方向。

实现这个的最佳方法是什么?拥有 XML 文件会很好,因为客户端/服务器可以解析它并根据数据创建方法/操作。但更清晰的方法是创建将执行解析的类。

最佳答案

我总是以二进制方式执行此操作。首先,您必须决定要使用的底层传输协议(protocol),可以是 UDP、TCP、TCS、SSL。我将从 TCP 开始,因为它非常稳定且易于使用。

处理包的一种简单方法是在每个包中以一个数字开头,指定这是哪个包。根据这个数字,您将包发送到处理数据的相应类。这在 C++ 和 Java 中都可以轻松完成。我认为在 C++ 中更容易,因为你可以在整个结构中读取第一个数字,但在 Java 中,你通常必须逐个原始地读取它。

请记住,互联网上的标准是使用大端值,但当今大多数机器(Intel、AMD、ARM...)上的标准使用小端值。所以在 C++ 中,你必须在发送之前翻转所有原语。而且您还必须翻转接收到的值。我不知道 Java 是否为你做了这个......

关于java - 套接字通信协议(protocol)/标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909652/

相关文章:

java - Jetty - 检测断开连接的客户端(续)

java - 如何通过 Java Sockets 使用 IOUtils.copy 传输文件

cocoa - 在 Mac OS X 上进行进程间通信的最佳方式

java - 无法在Java swing中设置连接4网格的最大尺寸

java - 查找 HashMap 中保存最小整数值的键

java - foo(int, int) 比 foo(int...)

c++ - Macports cgal 不工作!我如何解决它?

c++ - memset 和 std::complex<double> 的动态数组

C++ - 执行一系列不同实现的最佳方式

c# - 在 .NET 套接字中启用加密