socket程式設計小記

2021-09-11 11:18:22 字數 3121 閱讀 2387

【前言】

winsock是由unix下的bsd socket發展而來,是乙個與網路協議無關的程式設計介面。

【標頭檔案】

#include

【引用庫】

#pragma comment(lib, 「ws2_32.lib」)

【引數】

wversionrequested: 版本資訊。高階位元組指定小版本號,低位位元組指定主版本號。

lpwsadata: 返回請求的socket的版本資訊

【返回值】

成功:0;失敗:其它。

【說明】

1、非同步套接字啟動命令,在所有socket函式之前呼叫一次。

2、作業系統根據請求的socket版本來搜尋相應的socket庫,然後繫結找到的socket庫到該應用程式中。

3、利用第二個引數返回請求的socket的版本資訊。

4、【返回值】

成功:0;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、釋放套接字資源,斷開已建立的連線。

2、而已經由closesocket關閉卻仍有要傳送的資料的套介面則不會受影響,該資料仍要傳送。

3、可以在乙個迴圈中不斷呼叫wsacleanup,直至返回wsanotinitialised,來確保資源徹底清除。

4、【引數】

af:位址描述。目前僅支援af_inet。

type:套接字型別。如tcp(sock_stream)和udp(sock_dgram)。

protocol:套接字協議。常用的協議有:ipproto_tcp、ipproto_udp、ipproto_stcp、ipproto_tipc。

【返回值】

成功:新的套接字;失敗:invalid_socket。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、用於根據指定的位址族、資料型別和協議來分配乙個套介面的描述字及其所用的資源。

2、【引數】

s:套接字。

【返回值】

成功:0;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、釋放乙個套接字s,以後對s的訪問均以wsaenotsock錯誤返回。

2、受語義 so_linger 與 so_dontlinger 選項的影響。

3、4、

【引數】

s: 套接字。

addr: 乙個結構體指標,包含協議族、ip、埠號。

addrlen: 結構體長度。

【返回值】

成功:0;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【引數】

s:乙個已**未連線套接字。

backlog:等待連線佇列的最大長度。

【返回值】

成功:0;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、為申請進入的連線建立乙個後備日誌,然後便可用accept()接受連線了。

2、申請進入的連線請求被確認,並排隊等待被接受。

3、僅適用於支援連線的套介面,如 sock_stream 型別的。

4、如果當乙個連線請求到來時,佇列已滿,那麼客戶將收到乙個wsaeconnrefused錯誤。

5、當沒有可用的描述字時,listen()函式仍試圖正常地工作。它仍接受請求直至佇列變空。當有可用描述字時,後續的一次listen()或accept()呼叫會參照 當前佇列值 和「後備日誌」 將佇列重新填充,如有可能的話,將恢復監聽申請進入的連線請求。

6、【引數】

s: 自己的套接字。

addr: 【out】乙個結構體指標,包含對方的協議族、ip、埠號。

addrlen: 結構體長度。

【返回值】

成功:對方的套接字;失敗:invalid_socket。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、本函式從s的等待連線佇列中抽取第乙個連線,建立乙個與s同類的新的套介面並返回。

2、可阻塞。

3、【引數】

s: 乙個未連線的資料報或流類套介面。

addr: 要連線的位址,包含協議族、ip、埠號。

addrlen: 結構體長度。

【返回值】

成功:0;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【說明】

1、建立與指定外部埠的連線。

2、如套介面未被**,則系統賦給本地關聯乙個唯一的值,且設定套介面為已**。

3、【引數】

s:乙個用於標識已連線套介面的描述字。

buf:包含待傳送資料的緩衝區。

len:緩衝區中資料的長度。

flags:呼叫執行方式。

【返回值】

成功:傳送資料的長度;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【引數】

s 套接字

buff 待傳送資料的緩衝區

size 緩衝區長度

flags 呼叫方式標誌位, 一般為0, 改變flags,將會改變sendto傳送的形式

addr (可選)指標,指向目的套接字的位址

len addr所指位址的長度

【返回值】

成功:傳送資料的長度;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【引數】

s:乙個用於標識已連線套介面的描述字。

buf:包含待傳送資料的緩衝區。

len:緩衝區中資料的長度。

flags:呼叫執行方式。

【返回值】

成功:讀入的位元組數;連線已中止:0。失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

【引數】

s 已連線套介面的描述字

buff 接收資料緩衝區

size 緩衝區長度

flags 呼叫方式標誌位, 一般為0, 改變flags,將會改變sendto傳送的形式

addr (可選)指標,指向資料傳送源的位址

fromlen addr所指位址的長度

【返回值】

成功:讀入資料的長度;失敗:socket_error。可通過wsagetlasterror獲取錯誤碼。

socket程式設計小記

網路程式設計課上學習了一些socket函式,在c語言下和mfc下小結一下 首先socket的五元組有 源ip,目標ip,源埠,目的埠,協議 總的來說socket分為幾個步驟,對於客戶端 1.初始化 2.建立socket結構,填充如tcp udp型別,ipv4結構等 3.建立目標ip的位址,目的埠資訊...

socket程式設計小記

1.在寫乙個原始套接字程式設計的過程中查到的知識點 建立原始套接字之後,就可以使用sendto 和recvfrom 傳送和接收icmp資料報了。原始套接字接收報文規則 若接收的報文協議型別和定義的原始套接字匹配,那麼接收的所有資料拷貝入套接字中 如果套接字繫結了本地位址,那麼只有接收資料ip頭中對應...

Socket程式設計問題小記

在socket程式設計中,如果在乙個while迴圈中使用 objectinputstream reader new objectinputstream socket.getinputstream reader.readobject 可能會出現eofexception,看了網上的很多答案和解釋,覺得都...