[英]Socket programming confusion with windows and unix/linux
您好,我正在尝试使用C ++进行套接字编程。 我需要确认或拒绝这种逻辑。 我认为socket.h
头文件是为UNIX系统设计的,而对于Windows,一切winsock.h
完成。
这个对吗?
对于Windows,你需要winsock2.h
和ws2tcpip.h
。
在Linux上,套接字功能需要sys/socket.h
和sys/types.h
,IP相关结构需要netinet/in.h
其他差异:
SOCKET
作为套接字描述符,而Linux使用int
closesocket()
关闭套接字,而Linux使用close()
WSAStartup()
,并在完成套接字使用后调用WSACleanup()
。 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在其答案中概述了这些差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.