我正在做一个涉及多台计算机上几个应用程序的项目。主要应用程序是运行在C++服务器上的CentOS套接字服务器,客户端应用程序是运行在客户端PC上的Java程序。
它们将使用套接字来回通信。我已经定义了一组命令和参数,它们需要实现这些命令和参数才能支持一切。
我想了好几个选择,但我似乎找不到最完美的一个。
要点是,当套接字服务器发送消息X时,客户端必须知道如何处理它。同样也适用于另一个方向。
实现这一目标的最佳方式是什么?拥有XML文件会很好,因为客户机/服务器可以解析它并根据数据创建方法/操作。但是,更明确的方法是创建执行解析的类。
发布于 2014-02-20 14:00:29
我总是用二进制的方式做这件事。首先,您必须决定使用什么底层传输协议,它可以是UDP、TCP、TCS、SSL。我从TCP开始,因为它非常稳定且易于使用。
处理包的一种简单方法是在每个包中以一个数字开头,该数字指定该包是哪个包。根据这个数字,将包发送到处理数据的相应类。在C++和Java中都可以很容易地做到这一点。我认为在C++中更容易一些,因为您可以在整个结构中读取第一个数字--不是吗?但是在Java中,您通常必须按原语读取它。
记住,互联网上的标准是使用大端值,但在当今大多数机器上(英特尔、AMD、ARM.)使用小-端值。因此,在C++中,您必须在发送所有原语之前翻转它们。你也必须翻转接收到的值。我不知道Java是不是为你做的..。
发布于 2014-02-20 14:43:04
冰通过ZeroC是一个跨平台的跨语言库,用于C++与Java之间的TCP/IP通信。我使用ICE在Linux/AIX/Solaris之间进行C++/Java程序之间的通信,没有问题。ICE使用二进制传输协议为您执行大端/小端转换。ICE的缺点是您需要使用它的自定义语言来定义消息和调用。
https://stackoverflow.com/questions/21909652
复制相似问题