【问题标题】:C++ non C and clear way to send std::string over networkC++ 非 C 和通过网络发送 std::string 的清晰方法
【发布时间】:2015-03-23 07:10:03
【问题描述】:

我正在寻找一种通过 TCP / IP 网络发送 std::string 的方法。它必须独立于平台。

我看过的方法是:

  • C 套接字 - 乱七八糟。
  • boost::asio - 太复杂了
  • Qt - 要求您继承 QObject 并且仅需要单线程。

最简单但最强大的方法是什么?

还有一些示例代码使用给定的库用于服务器端和客户端函数,连接和传输 std::string 将是惊人的!

【问题讨论】:

  • 您可以使用 ZeroMQ 代替 C 套接字。
  • 如果你用 QT 填充舒适,你不需要从 QObject 继承你的数据,你也可以简单地用一个互斥锁来保护你的套接字类,并在多线程环境中使用它。我认为您找不到一个库,可以让您在不使用互斥锁或信号量之类的阻塞对象的情况下将数据推送到套接字中......
  • 这是一个寻求工具/库推荐的问题,根据帮助中心的意见和辩论与重点答案,该类别为not considered On Topic。根据这一点:@ForceBru ZeroMQ 可能不算“强”,因为相对较弱的保证它只会完全传送或根本不传送消息,因此如果您需要某种传送保证,则需要re-implement TCP with sequence numbers。要知道的事情。
  • @HostileFork 恕我直言,先生,您在原始帖子中添加了许多“未说明”的要求,并假设这些是(否则相当薄弱的)任务定义的一部分.是的,关于什么应该是什么以及什么不需要是 “强” 解决方案的一部分,还有其他意见,但是,有保证的交付不一定是消息传递层的一部分(未定义)应用程序架构。在不间断的业务关键系统设计/实施方面花费了数年时间,您可能会设计一个智能/轻量级消息传递层并临时添加交付控制
  • 您可能想阅读 whathaveyoutried.com 并向 StackOverflow 社区表示敬意,该社区强烈鼓励发布高质量的问题以及 MCVE(a Minimum-Complete-Verifiable-Example of code ) 显示到目前为止您已经尝试过的内容。您可能想要更新您的帖子,以达到最低合理的质量水平并表明您尊重其他 StackOverflow 贡献成员的意愿。他们是喜欢回答有关 MCVE 相关问题的好问题的专业人士。 享受成为 StackOverflow 贡献成员并支持此社区网络礼仪

标签: c++ networking


【解决方案1】:

你说的最强是什么意思?最快的 ?最简单的? 服务器(例如字符串的接收者):

  • 应该同步还是异步?
  • 它是否必须回答某些问题?

回答者应该推动您的选择。

如果你想要一些非常简单的东西,找“portable telnet c++ server client”,你会得到很多库和代码示例。

但是,为了回答您的问题,这里有一些可移植的库:

【讨论】:

    【解决方案2】:

    这个问题有点模棱两可:

    a) 通过网络发送“std::string”是什么意思?你想完全序列化这个对象,发送它并在另一端反序列化它吗?还是简单地发送实际文本并将其重新构建为 std::string (我认为这更简单且更受欢迎)?

    b) 听起来您的问题实际上是“有哪些平台/库可用于联网?”。

    for a :如果您决定发送文本并将其重新构建为 std::string ,那么您没有问题,只需将文本作为 C 字符串发送。您可能希望使用 XML 或 JSON 等某种数据格式对其进行包装,以确保正确发送文本。如果您确实想序列化 std::string ,那么没有干净的方法可以这样做。您可能希望将对象重新解释为 char array ,以这种方式发送并将其写入一些内存。这既不安全也不简单。

    for b :那里有很多库。 POCO 是众所周知的,可以退出。 JUCE 是一个简单的、跨平台的、现代的 C++ 平台,它支持面向对象的 Socket 类。您可能也想使用它们。

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 2010-10-03
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      相关资源
      最近更新 更多