C++套接字编程

7

我想知道是否有一种简单干净的方法来创建、写入和接收C++网络套接字。我知道在C中,你可以使用sys/sockets等低级库,但是在C++中是否有更好的选择?我们正在使用C++-17,但我仍然找不到关于套接字编程的很多资料。在Python中很容易,但是C++让我感到很吃力。


4
C++标准库目前不支持套接字。当然,您可以使用任何C语言特性(如果您的操作系统支持),例如在sys/sockets中声明的特性。 - user2100815
2
有boost::asio。 - user207421
2个回答

6
C++标准库目前没有任何套接字或网络功能。标准委员会成立了一个网络子组,正在开发Networking TS(当前草案),但这并未纳入C++17中。
暂时可以使用Boost.Asio,它在很大程度上基于Networking TS,提供跨平台的网络接口。当然,您也可以直接使用操作系统的网络API,例如POSIX套接字或WinSock。

看看Networking TS会发生什么是很有趣的,我个人认为C++需要一个好的套接字库,但这只是我的想法。目前Asio似乎很吸引人且易于管理。 - user9232663
哇塞。安装Boost:在3.0 mbps的互联网连接上,初始克隆至少需要45分钟,并且将占用大约1.5 GB的磁盘空间。看起来很多啊。 - zipzit
原来有一个非Boost ASIO库... - zipzit

5

2022

标准库中仍然没有此功能。但是,有一个干净的轻量级解决方案,就是kissnet

kissnet是对Linux/Windows下相应套接字头文件的轻量级封装(约1500行代码)。

可通过OpenSSL进行安全套接字通信。

需要使用C++ 17编译器,因为它们正在使用std::byte和其他新特性。

为什么类似这样的东西不在标准库里?我也不知道。


2
因为如果你看细节,它离足够好以标准化还有很长的路要走。socket类非常庞大,即使你不使用任何高级功能,移动它也非常昂贵。它实际上也没有隐藏操作系统的花哨功能。它具有半成品的SSL支持,不允许正确的证书配置...我需要继续吗? - spectras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接