套接字编程与windows和unix / linux的混淆

时间:2015-09-18 16:37:25

标签: c++ c linux windows sockets

您好我在c ++中尝试套接字编程。我需要确认或拒绝这种逻辑。我认为socket.h头文件是为UNIX系统设计的,而对于Windows,一切都是用winsock.h完成的。

这是对的吗?

3 个答案:

答案 0 :(得分:4)

对于Windows,您需要winsock2.hws2tcpip.h

在Linux上,套接字函数需要sys/socket.hsys/types.h,IP相关结构需要netinet/in.h

其他一些差异:

  • Windows使用SOCKET表示套接字描述符,而Linux使用int
  • Windows有closesocket()关闭套接字,而Linux使用close()
  • 在Windows上,您需要在调用任何套接字函数之前调用WSAStartup(),并在使用套接字时调用WSACleanup()
  • 在Linux上,您可以使用perror()strerror()从套接字函数中打印错误。在Windows上,您必须致电WSAGetLastError()以获取错误代码,并FormatMessage来获取错误文字。

答案 1 :(得分:1)

大多数平台都实现了兼容BSD的套接字API,但不同的平台确实使用不同的.h文件来声明其API。因此,要回答您的问题,是,Windows使用winsock.h(和winsock2.h),而基于POSIX的平台(如Unix / Linux)使用sys/socket.h代替socket.h定义为POSIX标准的一部分,但Windows不是POSIX兼容平台)。如果要编写跨平台代码,则必须考虑到这一点。以及@ dbush在其答案中概述的其他差异。

答案 2 :(得分:-2)

每个头文件以" sys /...&# 34开头;专为UNIX环境而设计。对于Windows,他们倾向于使用" win"作为他们使用的每个头文件的前缀。

如果你对windows套接字(winsocks)感兴趣,我想你应该从here开始。

对于UNIX套接字,this网站看起来非常有趣且容易:)