1. 程式人生 > >網路程式設計之windows/Linux比較

網路程式設計之windows/Linux比較

    1、標頭檔案:

    #include <winsock.h> or #include <winsock2.h>

    #include <sys/socket.h>

  • 新增#program comment(lib,"Ws2.lib")
  • 預設windows.h檔案會包含winsock.h,當你包含winsock2.h就會衝突。要解決這個問題,需要首先包含winsock2.h,然後再包括windows.h,要注意包含的順序。

    2、socket初始化與關閉:

    Windows需要 WSAStartup(),closesocket(...)函式

    Linux不需要初始化,結束socket用close(...)

    3、型別宣告:

    SOCKET

    int

  • 在Windows裡將SOCKET巨集定義成unsigned int

    4、錯誤返回碼:

    windows下getlasterror()/WSAGetLastError()/SOCKET_ERROR

    linux下errno變數

  • SOCKET_ERROR=-1

    5、設定非阻塞:

    ioctlsocket(server_socket,FIONBIO,&ul);

    ioctlsocket在Linux中沒有定義,用fcntl替代即可,但要包含fcntl.h標頭檔案。

    #include <fcntl.h>

    fcntl(server_socket,F_SETFL, O_NONBLOCK);

    6、send函式最後一個引數:

    windows下一般設定為0 

    linux下最好設定為MSG_NOSIGNAL,禁止send()函式向系統傳送異常訊息。如果不設定,在傳送出錯後有可能會導致程式退出。

    先總結這麼多吧,socket程式設計是網路程式設計中比較重要的一個部分,對理解TCP/IP協議也有一定的幫助。當然,如果是通訊的朋友僅僅知道socket是遠遠不夠的,它封裝了協議的具體實現,所以,我希望有興趣的朋友深入分析一下socket內部實現,我相信一定會對網路協議有更深入的理解。

    還有想說說程式移植問題,windows和WinCE就不多說了,它們出於同門,自然有千著絲萬縷的聯絡,偶有不同也就是由於系統簡化和記憶體限制的問題。windows和Linux就不一樣了,從核心到函式,有著太多的不一樣,但是,這不妨礙聰明的人們在兩個系統平臺上進行移植操作,也在網際網路上總結了無數的精華文章。當遇到移植問題,系統不相容的問題的時候,一定要堅持,網上找解決方法,那你就站在巨人的肩膀上,如果自己找到答案那你就是那個巨人!與君共勉!