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

Shr*_*wan 2 c c++ sockets linux windows

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

这样对吗?

dbu*_*ush 5

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

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

其他一些区别:

  • Windows 使用SOCKET套接字描述符,而 Linux 使用int
  • Windows 必须closesocket()关闭套接字,而 Linux 使用close()
  • 在 Windows 上,您需要WSAStartup()在调用任何套接字函数之前以及WSACleanup()使用完套接字后调用。
  • 在 Linux 上,您可以使用perror()或打印来自套接字函数的错误strerror()。在 Windows 上,您必须调用WSAGetLastError()以获取错误代码并FormatMessage获取错误文本。