繁体   English   中英

Windows和Unix / Linux的套接字编程混乱

[英]Socket programming confusion with windows and unix/linux

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

这个对吗?

对于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来获取错误文本。

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

每个以“ sys / ...”开头的头文件都是为UNIX环境设计的。 对于Windows,他们倾向于使用“ win”作为所使用的每个头文件的前缀。

如果您对Windows套接字(winsocks)感兴趣,我想您应该从这里开始。

至于UNIX套接字, 站点似乎非常有趣且易于使用:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM