我正在开发一个涉及多台计算机上的多个应用程序的项目。主要应用程序是在CentOS服务器上运行的C ++套接字服务器,客户端应用程序是在客户端PC上运行的Java程序。
这些将使用套接字来回通信。我已经定义了一组他们需要实现的命令和参数,以支持所有内容。
我想过几个选项,但我似乎无法找到完美的选择..
关键是当Socket服务器发送消息X
时,客户端必须知道如何处理它。同样适用于另一个方向。
实施此操作的最佳方法是什么?拥有XML文件会很好,因为客户端/服务器可以解析它并根据数据创建方法/操作。但是更明确的方法是创建可以进行解析的类。
答案 0 :(得分:0)
我总是以二进制的方式做到这一点。首先,您必须决定使用什么底层传输协议,它可以是UDP,TCP,TCS,SSL。我会从TCP开始,因为它非常稳定且易于使用。
处理包的一种简单方法是在每个包中以一个数字开头,该数字指定了这个包。基于此数字,您将包发送到处理数据的相应类。这可以在C ++和Java中轻松完成。我认为在C ++中它更容易,因为在那里你可以不在第一个数字读取整个结构中,但在Java中你通常必须用原语来读它。
请记住,互联网上的标准是使用big-endian值,但今天大多数机器上的标准(Intel,AMD,ARM ......)使用little-endian值。因此在C ++中,您必须在发送之前翻转所有基元。而且你必须翻转收到的值。我不知道Java是否会为你做这件事......
答案 1 :(得分:0)
ICE by ZeroC是一个跨平台和跨语言库,用于C ++和Java之间的TCP / IP通信。我已经使用ICE在Linux / AIX / Solaris之间进行C ++ / Java程序的通信而没有任何问题。 ICE使用二进制传输协议为您执行big-endian / little-endian转换。 ICE的缺点是您需要使用其自定义语言定义消息和调用。