C和C++中的Socket解释

4

我一直在想是否有一个标准的C++套接字头文件。

我在整个互联网上搜索(使用谷歌搜索引擎),但是除了找到一些库,如Boost、chilkat等,我找不到任何标准的C++套接字头文件。

我只成功地找到了一个标准的C编程语言套接字头文件。如果我在我的C++代码中使用了C标准的套接字头文件,这意味着我的程序是纯C++还是C和C++混合?

因为我没有找到任何标准的C++套接字头文件。就像C++有,C有一样,但是C++没有标准的套接字头文件。

我希望有经验的C/C++人士能够逐步解释所有这些内容给我。


3
你为什么要把代码限制在C语言中,只因为你使用了C头文件?你使用的是哪个标准的套接字头文件?通常,套接字取决于你的操作系统。 - alfa
这就是为什么我在询问,以便得到解释并理解它。 - user1341993
4
C和C++源代码文件并不存在。如果你使用C++编译器进行编译,那么它被视为C++源代码文件;如果你使用C编译器进行编译,那么它被视为C源代码文件。你可以非常小心地混合使用不同编译器创建的目标文件来得到一个可执行文件。 - pmg
3个回答

7

在C++中没有标准的套接字库。您可以使用操作系统提供的任何套接字API(通常是C API,在Unix操作系统上,它将是BSD套接字API),或者您可以使用像Boost.ASIO这样的C++库,它是跨平台的。


我没有得到我的答案,使用标准的C套接字头文件在我的C++应用程序中,它是C和C++吗?还是只有C++? - user1341993
6
@user1341993,C或C++中确实没有标准的套接字头文件。 - rid
3
通常情况下,头文件或者您的代码会提供语法糖,使得它可以在C++程序中正常使用,extern 'C',参考链接http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html。 - Steve Townsend
4
如果在C++程序中使用C sockets API(请注意,没有标准API),它仍然是一个C++程序。代码的风格可能类似于C语言,这可能会或不会让您感到困扰,但它仍将是一个C++程序。 - HighCommander4

2
由比尔·乔伊在70年代发明的BSD sockets可以说是“标准套接字API”。
通常,您需要包含以下头文件:
#include <sys/socket.h> // Core BSD socket functions and data structures.
#include <netinet/in.h> // AF_INET and AF_INET6 address families and their
                        // corresponding protocol families PF_INET and PF_INET6.
#include <arpa/inet.h>  // Functions for manipulating numeric IP addresses.
#include <netdb.h>      // Name resolution

Beej的指南是一份关于套接字(BSD套接字)编程的优秀教程:

http://beej.us/guide/bgnet/


0
如果您在使用C++编译代码时包含C头文件,则会生成一个C++应用程序。有许多C++框架可供使用,例如Boost::asio、ACE、WinSock等。这取决于您是否希望代码具有可移植性以及您的应用程序是否仅在特定操作系统上运行,例如Linux、Mac或Windows。
此外,由于C++是C的超集,因此无论您使用C还是C++都无关紧要,因为您正在编译一个C++程序,因此您将生成纯粹的C++代码。

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