socket在windows下和linux下的區別

2021-06-19 08:23:19 字數 1503 閱讀 4901

1)標頭檔案

windows下winsock.h/winsock2.h

linux下sys/socket.h    錯誤處理:errno.h

2)初始化

windows下需要用wsastartup

wsadata wsadata;

err = wsastartup(0x202,&wsadata);     if ( err != 0 )

else if ( lobyte( wsadata.wversion ) != 2 || hibyte( wsadata.wversion ) != 2 )   //檢測是否支援這個版本的socket

對應的退出清理用wsacleanup( );

linux下不需要

3)關閉socket

windows下closesocket(...)

linux下close(...)

4)socket型別

windows下socket

linux下int

5)獲取錯誤碼

windows下wsagetlasterror()

linux下errno變數

extern int errno;

int geterror()

6)設定非阻塞

windows下ioctlsocket(server_socket,fionbio,&ul);     int ul = 1

linux下fcntl(server_socket,f_setfl, o_nonblock);   

7)send函式最後乙個引數

windows下一般設定為0

linux下必須是後幾個引數用到的socket中,值最大的數(整型)加1 (另一種說法是設定為msg_nosignal)

8)毫秒級時間獲取

windows下gettickcount()

linux下gettimeofday()

9)編譯連線

windows下ws2_32.lib

linux下

10)socket操作錯誤返回值

都為socket_error,他的值是-1

11)異常處理

windows下沒有對send()的異常處理,最後乙個引數無效,寫0就可以了。

linux下

當連線斷開,還發資料的時候,不僅send()的返回值會有反映,而且還會像系統傳送乙個異常訊息,如果不作處理,系統會出brokepipe,程式會退出。為此,send()函式的最後乙個引數可以設定msg_nosignal,禁止send()函式向系統傳送異常訊息。

12)wsa巨集

windows下wsa相關的操作

linux下wsa相關的操作在linux不必要,直接去掉即可

3、多執行緒

多執行緒: (win)process.h --〉(linux)pthread.h

_beginthread --> pthread_create

_endthread --> pthread_exit

windows 下socket 程式設計

111111windows 下用microsoft visual studio 2005 編寫socket程式 windows 下實現同步socket程式設計,和linux下有許多相同的地方,基本的socket流程完全相同,所有的socket 相關的函式都在 winsock.h 中宣告 還有wind...

Windows下Socket程式設計

監聽listen 接收accept 傳送send tcp sendto udp 接收recv tcp recvfrom udp 連線connect 載入庫資源 wsastartup 建立socket socket 繫結位址資訊 bind 監聽 listen 獲取監聽佇列第乙個連線處理 accept ...

Windows和Linux下socket的區別

1.標頭檔案 windows下winsock.h或winsock2.h linux下netinet in.h 大部分都在這兒 unistd.h close函式在這兒 sys socket.h 在in.h裡已經包含了,可以省了 2.初始化 windows下需要用wsastartup啟動ws2 32.l...