首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字通信协议/标准

套接字通信协议/标准
EN

Stack Overflow用户
提问于 2014-02-20 13:43:14
回答 2查看 494关注 0票数 2

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

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

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

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2014-02-20 14:00:29

我总是用二进制的方式做这件事。首先,您必须决定使用什么底层传输协议,它可以是UDP、TCP、TCS、SSL。我从TCP开始,因为它非常稳定且易于使用。

处理包的一种简单方法是在每个包中以一个数字开头,该数字指定该包是哪个包。根据这个数字,将包发送到处理数据的相应类。在C++和Java中都可以很容易地做到这一点。我认为在C++中更容易一些,因为您可以在整个结构中读取第一个数字--不是吗?但是在Java中,您通常必须按原语读取它。

记住,互联网上的标准是使用大端值,但在当今大多数机器上(英特尔、AMD、ARM.)使用小-端值。因此,在C++中,您必须在发送所有原语之前翻转它们。你也必须翻转接收到的值。我不知道Java是不是为你做的..。

票数 0
EN

Stack Overflow用户

发布于 2014-02-20 14:43:04

冰通过ZeroC是一个跨平台的跨语言库,用于C++与Java之间的TCP/IP通信。我使用ICE在Linux/AIX/Solaris之间进行C++/Java程序之间的通信,没有问题。ICE使用二进制传输协议为您执行大端/小端转换。ICE的缺点是您需要使用它的自定义语言来定义消息和调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21909652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档