【问题标题】:How to encapsulate C/C++ socket send and receive functions in a class?如何将 C/C++ 套接字发送和接收函数封装在一个类中?
【发布时间】:2020-01-11 07:05:27
【问题描述】:

我正在使用标准的 C/C++ 套接字函数,但我想将它们封装到 C++ 类中。问题是用于发送和接收的函数返回(或要求)指向 void 的指针。有没有办法使用封装这些值的对象?

例如,在 Java 中,Socket 类同时使用 ObjectOutputStreamObjectInputStream 以使用 Object 类型,因此每个对象都可以通过套接字发送。 我知道在 Java 中方法是完全不同的,因为指针对程序员是隐藏的,但是在 C++ 中是否有类似的解决方案?

【问题讨论】:

  • 看看能不能用Boost's Socket Iostreams
  • 您需要为此使用一些现成的库或框架。见stackoverflow.com/questions/4199185/socket-api-or-library-for-c
  • 我会尝试在您的代码和套接字之间拉开一点距离。我的意思是,如果你例如想要实现 HTTP,使用 HTTP 库。对于其他协议,同样适用。除非有充分的理由,否则不要自己实现协议。如果您只想在程序之间交换消息,请考虑使用例如ZeroMQ 代替。

标签: c++ sockets oop


【解决方案1】:

socket 不是 C++ 函数。它是一个系统级函数,它对对象一无所知(或者实际上是 c++ 中的任何内容),因此您必须安排为它提供一个指向您要传输的数据的指针。

【讨论】:

    【解决方案2】:

    正如@GCT 所说,socket 不是一个函数,而是一个用于处理网络连接的系统级函数。在 C/C++ 中,每个套接字都用一个整数值来标识,因此按照您的意愿,将其作为对象处理并不容易。

    我建议您阅读此tutorial 以了解有关套接字的更多信息。

    也许它可以帮助你:我有一个项目展示了如何在 C++ 中使用套接字。服务器和客户端包含在它们自己的类中。你可以通过这个link得到它。

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2013-04-01
      • 1970-01-01
      • 2012-09-23
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2015-03-09
      相关资源
      最近更新 更多