我已经涉足C,我现在正在接受C.
我想学习标准库(std :: namespace),所以我正在研究一些项目.一个是简单的电子邮件程序,它登录到我的本地SMTP服务器并显示我的电子邮件,并且能够发送邮件.我为那种古老的感觉添加了一些ncurses.
问题是,我无法找到使用网络套接字的标准库方式.好像我必须在C sys / socket.h中使用网络套接字,但最后我得到了一个文件描述符,它留下了read()和write()以及send()函数调用.我希望能够使用std :: fstream或std :: ostream类.但open()成员函数采用文件名,而不是文件描述符.
我知道Boost库具有这种功能,但是模板等等都是我的想法,我现在想要只使用标准库.
在继续之前,我只想确保没有更好的方法来读取()和write()到connect()网络套接字C函数返回的文件描述符.
最佳答案 标准库不包含套接字或任何网络支持.
你的选择是
> BSD套接字,如果您通过OS特定库访问* nix
> BSD阻塞套接字,如果你在Windows上,通过Winsock
> Async套接字,如果您在Windows上,通过Winsock和Windows消息泵
> IOCP,如果你在Windows上,通过Winsock
> Boost ASIO,便携式.
>其他第三方图书馆,其他人使用上述其中一个并为您包装.
在所有这些中,我个人认为,Boost ASIO是最容易使用的.我建议至少要通过一个关于阻止BSD套接字的教程来解决这些问题.
除了5和6之外,所有这些都将非常像C一样.网络编程确实不是一个利基,面向对象的编程和C统治老C风格.你可以包装东西,但这是你可以期待的最好的东西.
你真的不会在套接字代码中使用fstream或ostream.也许在它上面的一层,但最后,所有这些实现都是相似的,因为你将发送和接收二进制数据或文本的字节.