[英]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.