程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Winsock API函數大全2

Winsock API函數大全2

編輯:關於C++

本系統(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日公布之 WINSOCK 第1.1版(如附錄)中所定義之函式 (routine); 包括了30個Berkeley Software Distribution (BSD) 的函式以及16個符合 Windows Message-driven 特性的函式。

(11) inet_ntoa():將一網路位址轉換成「點格式」字串。

格式: char FAR * PASCAL FAR inet_ntoa( struct in_addr in );

參數: in 一個代表 Internet 位址的結構

傳回值: 成功 - 一個代表位址的「點格式」(dotted) 字串

失敗 - NULL

說明: 此函式將一 Internet 位址轉換成「a.b.c.d」字串格式。

(12) ioctlsocket():控制 Socket 的模式。

格式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP );

參數: s Socket 的識別碼,cmd 指令名稱,argP 指向 cmd 參數的指標

傳回值: 成功 - 0

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 此函式用來獲取或設定 Socket 的運作參數。其所提供的指令有:

FIONBIO -- 開關 non-blocking 模式

FIONREAD -- 自 Socket 一次可讀取的資料量

SIOCATMARK -- OOB 資料是否已被讀取完 (*暫不提供此功能)

(13) listen():設定 Socket 為監聽狀態,准備被連接。

格 式: int PASCAL FAR listen( SOCKET s, int backlog );

參 數: s Socket 的識別碼,backlog 未真正完成連接前(尚未呼叫 accept() 前)彼端的連接要求的最大個數

傳回值: 成功 - 0

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 使用者可利用此函式來設定 Socket 進入監聽狀態,並設定最多可有多少個在未真正完成連接前的彼端的連接要求。(目前最大值限制為 5, 最小值為1)

(14) ntohl():將一 32 位元 u_long 的值由 network 排列方式轉換成host 排列方式。

格式: u_long PASCAL FAR ntohl( u_long netlong );

參數: netlong 一個 32 位元 network 排列方式的數目

傳回值: 一個 32 位元 host 排列方式的數目

說明: 因為 network 的排列方式與 host 的排列方式可能不同,所以我們需要此一函式來做轉換。

(15) ntohs():將一 16 位元 u_short 的值由 network 排列方式轉換成host 排列方式。

格式: u_short PASCAL FAR ntohs( u_short netshort );

參數: netshort 一個 16 位元 network 排列方式的數目

傳回值: 一個 16 位元 host 排列方式的數目

說明: 因為 network 的排列方式與 host 的排列方式可能不同,所以我們需要此一函式來做轉換。

(16) recv():自 Socket 接收資料。

格式: int PASCAL FAR recv( SOCKET s,char FAR *buf,int len,int flags );

參數: s Socket 的識別碼,buf 存放接收到的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式

傳回值: 成功 - 接收到的資料長度 (若對方 Socket 已關閉,則為 0)

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 此函式用來自連接式的 Datagram Socket 或 Stream Socket接收資料。對 Stream Socket 言,我們可以接收到目前有效的 (available)資料,但其數量不超過 len 的大小。若是此 Socket 設定 SO_OOBINLINE,且有 out-of-band 的資料未被讀取,那麽只有 out-of-band 的資料被取出。

對 Datagram Socket 言,只取出第一個 datagram;若是該 datagram 大於使用者提供的儲存空間,那麽只有該空間大小的資料被取出,多馀的資料將遺失,且回覆錯誤的訊息。 flags 的值可為 MSG_PEEK、MSG_OOB(*暫不提供此功能)的組合.

(17) recvfrom():讀取一個 Datagram,並儲存資料來源的位址。

格 式: int PASCAL FAR recvfrom( SOCKET s,char FAR *buf,int len,int flags,struct socketaddr FAR *from,int FAR *fromlen );

參 數: s Socket 的識別碼,buf 存放接收到的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式,from 資料來源的位址,fromlen from 的大小

傳回值: 成功 - 接收到的資料長度 (若對方 Socket 已關閉,則為 0)

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 此函式用來讀取資料並記錄資料來源的位址。對 Stream Socket 言,其作用與 recv() 相同,參數 from 及 fromlen 將不被用到。

(18) select():檢查一或多個 Sockets 是否處於可讀、可寫或錯誤的狀態。

格式: int PASCAL FAR select( int nfds,fd_set FAR *readfds,fd_set FAR *writefds,fd_set FAR *exceptfds,const struct timeval FAR *timeout );

參數: nfds 此參數在此並無作用,readfds 要被檢查是否可讀的 Sockets,writefds 要被檢查是否可寫的 Sockets,exceptfds 要被檢查是否有錯誤的 Sockets,timeout 此函式該等待的時間。若為 NULL 時,表示 blocking,此函式會等到有事件發生。

傳回值: 成功 - 符合條件的 Sockets 總數 (若 Timeout 發生,則為 0)

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 使用者可利用此函式來檢查 Sockets 是否有資料可被讀取,或是有空間可以寫入,或是有錯誤發生。

(19) send():使用連接式的 Socket 傳送資料。

格式: int PASCAL FAR send( SOCKET s,const char FAR *buf,int len,int flags );

參數: s Socket 的識別碼,buf 存放要傳送的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式

傳回值: 成功 - 送出的資料長度

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 此函式適用於連接式的 Datagram 或 Stream Socket 來傳送資料。對 Datagram Socket 言,若是 datagram 的大小超過限制,則將不會送出任何資料,並會傳回錯誤值。若是傳送 (transport) 系統內之儲存空間不夠存放這些要傳送的資料,send() 將會被 block 住,除非該 Socket 被設定為 non-blocking 模式。使用者亦須注意 send()函式執行完成,並不表示資料已經成功地送抵對方了。 flags 的值可設為 MSG_DONTROUTE(*暫不提供此功能)及 MSG_OOB 的組合.

(20) sendto():將資料送到指定的目的地。

格式: int PASCAL FAR sendto( SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen );

參數: s Socket 的識別碼,buf 存放要傳送的資料的暫存區,len buf 的長度,flags 此函式被呼叫的方式,to 資料要送達的位址,tolen to 的大小

傳回值: 成功 - 送出的資料長度

失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)

說明: 此函式適用於 Datagram 或 Stream Socket 來傳送資料到指定的位址。對 Datagram Socket 言,若是 datagram 的大小超過限制,則將不會送出任何資料,並會傳回錯誤值。對 Stream Socket 言,其作用與 send() 相同;參數 to 及 tolen 在此並無作用。 若是傳送 (transport) 系統內之儲存空間不夠存放這些要傳送的資料,sendto() 將會被 block 住,除非該Socket 被設定為 non-blocking 模式。使用者亦須注意 sendto() 函式執行完成,並不表示資料已經成功地送抵對方了。 flags 的值可設為 MSG_DONTROUTE(*暫不提供此功能)及 MSG_OOB 的組合.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved