簡體   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