【发布时间】:2017-05-11 07:55:57
【问题描述】:
我曾涉足 C,目前正在学习 C++。
我想学习标准库(std:: 命名空间),所以我正在做一些项目。一个是一个简单的电子邮件程序,它登录到我的本地 SMTP 服务器并显示我的电子邮件,并具有发送邮件的能力。我为这种旧感觉添加了一点 ncurses。
问题是,我还没有找到使用网络套接字的标准库方法。似乎我必须在 C sys/socket.h 中使用网络套接字,但最后我得到了一个文件描述符,它留下了 read() 和 write() 和 send() 函数调用。我希望能够使用std::fstream 或std::ostream 类。但是open() 成员函数采用文件名,而不是文件描述符。
我知道 Boost 库有这个功能,但是模板之类的东西让我头疼,我现在只想坚持使用标准库。
在继续之前,我只想确保没有更好的方法将read() 和write() 转换为connect() 网络套接字C 函数返回的文件描述符。
【问题讨论】:
-
您能否发布一些示例代码,展示您如何尝试使其工作,以及哪些工作有效但不是
std::? -
为此在 C++ 中使用 C 套接字 API 没有任何问题(我一直都这样做)。你认为其他人的套接字库是如何实现的?一切最终都必须通过操作系统提供的套接字 API,而在 C/C++ 中,BSD 样式的套接字函数(
connect()、send()、recv()等)可以在大多数平台上移植。 Boost.ASIO、ACE、CURL 等都是基于此构建的。而SMTP使用 C 套接字函数实现起来并不难。 -
您的问题是关于 C++,而不是 C。请不要标记垃圾邮件...
-
自 2019 年起,您可以使用 kissnet 库,它包装了 socket.h(以及 Windows 上的 winsock.h),并通过 OpenSSL 提供了安全套接字。