您好我在c ++中尝试套接字编程。我需要确认或拒绝这种逻辑。我认为socket.h
头文件是为UNIX系统设计的,而对于Windows,一切都是用winsock.h
完成的。
这是对的吗?
答案 0 :(得分:4)
对于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
来获取错误文字。答案 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)