Winsock 函數詳解

Winsock 函數詳解
 
WSAStartup()
連結應用程序與Winsock.DLL 的第一個函數。
格 式:
int WSAStartup( WORD wVersionRequested,LPWSADATA lpWSAData )
參 數:
wVersionRequested 欲使用的 Windows Sockets API 版本
lpWSAData 指向 WSADATA 資料的指標
傳回值:
成功 - 0
失敗 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL
說明:
此函數「必須」是應用程序呼叫到 Windows Sockets DLL 函數中的第一
個函數呼叫成功後,纔可以再呼叫其他 Windows Sockets DLL 的函數。此函數亦讓使用者可以指定要使用的 Windows Sockets API 版本,
及獲取設計者的一些信息。
socket()
建立Socket。
格 式:
SOCKET socket( int af, int type, int protocol )
參 數:
af 目前只提供 PF_INET(AF_INET)
type Socket 的型態 (SOCK_STREAM、SOCK_DGRAM)
protocol 通訊協定(如果使用者不指定則設爲0)
傳回值:
成功 - Socket 的識別碼
失敗 - INVALID_SOCKET(呼叫 WSAGetLastError() 可得知原因)
說明:
此函數用來建立一 Socket,併爲此 Socket 建立其所使用的資源。
Socket 的型態可爲 Stream Socket 或 Datagram Socket。
bind()
指定 Socket 的 Local 地址 (Address)。
格 式:
int bind( SOCKET s, const struct sockaddr FAR *name,int namelen );
參 數:
s Socket的識別碼
name Socket的地址值
namelen name的長度
傳回值:
成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明:
此一函數是指定 Local 地址及 Port 給某一未定名之 Socket。使用者若不
在意地址或 Port 的值,那麼他可以設定地址爲 INADDR_ANY,及 Port 爲 0;那麼Windows Sockets 會自動將其設定適當之地址及 Port (1024 到 5000之間的值),使用者可以在此 Socket 真正連接完成後,呼叫 getsockname() 來獲知其被設定的值。
bind() 函數要指定地址及 port,這個地址必須是執行這個程序所在機器的 IP
地址,所以如果讀者在設計程序時可以將地址設定爲 INADDR_ANY,這樣
Winsock 系統會自動將機器正確的地址填入。如果您要讓程序只能在某臺機器上
執行的話,那麼就將地址設定爲該臺機器的 IP 地址。由於此端是 Server 端,所
以版主們一定要指定一個 port 號碼給這個 socket。
listen()
設定 Socket 爲監聽狀態,準備被連接。
格 式:
int listen( SOCKET s, int backlog );
參 數:
s Socket 的識別碼
backlog 未真正完成連接前(尚未呼叫 accept 前)彼端的連接要求的最大
個數
傳回值:
成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明:
使用者可利用此函數來設定 Socket 進入監聽狀態,並設定最多可有多少
個在未真正完成連接前的彼端的連接要求。(目前最大值限制爲 5, 最小值爲1)
connect()
要求連接某一 TCP Socket 到指定的對方。
格 式:
int connect( SOCKET s, const struct sockaddr
FAR *name, int namelen );
參 數:
s Socket 的識別碼
name 此 Socket 想要連接的對方地址
namelen name的長度
傳回值:
成功 - 0
失敗 - SOCKET_ERROR (呼叫WSAGetLastError()可得知原因)
說明:
此函數用來向對方要求建立連接。若是指定的對方地址爲 0 的話,會傳
回錯誤值。當連接建立完成後,使用者即可利用此一 Socket 來做傳送或接收資料之用了。
accept()
接受某一 Socket 的連接要求,以完成 Stream Socket 的連接。
格 式:
SOCKET accept(SCOKET s, SOCKADDR *addr,int FAR *addrlen )
參 數: s Socket的識別碼
addr 存放來連接的彼端的地址
addrlen addr的長度
傳回值:
成功 - 新的Socket識別碼
失敗 - INVALID_SOCKET (呼叫 WSAGetLastError() 可得知原因)
說明:
Server 端的應用程序呼叫此一函數來接受 Client 端要求的 Socket 連接動作請求。
closesocket()
關閉某一Socket。
格 式:
int closesocket( SOCKET s );
參 數:
s Socket 的識別碼
傳回值:
成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明:
此一函數是用來關閉某一 Socket 。
WSACleanup()
結束 Windows Sockets DLL 的使用。
格 式:
int WSACleanup( void );
參 數: 無
傳回值: 成功 - 0
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明:當應用程序不再需要使用Windows Sockets DLL 時,須呼叫此一函數來
註銷使用,以便釋放其佔用的資源。
send()
使用連接式(connected)的 Socket 傳送資料。
格 式:
int send( SOCKET s, const char FAR *buf,
int len, int flags );
參 數:
s Socket 的識別碼
buf 存放要傳送的資料的暫存區
len buf 的長度
flags 此函數被呼叫的方式
傳回值:
成功 - 送出的資料長度
失敗 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
說明:
此函數用於將信息從本端通過socket發送到遠程端。
recv()
自 Socket 接收資料。
格 式:
int 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 言,版主們可以接收到目前 input buffer 內有效的資料,但其數量不超過 len 的大小。
WSAStartup()
連結應用程序與 Windows Sockets DLL 的第一個函數。
格 式:
int WSAStartup( WORD wVersionRequested,LPWSADATA lpWSAData );
參 數: wVersionRequested 可使用的 Windows Sockets API 最高版本
lpWSAData 指向 WSADATA 資料的指標
傳回值:
成功 - 0
失敗 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL
說明:
此函數「必須」是應用程序呼叫到 Windows Sockets DLL 函數中
的第一個,也唯有此函數呼叫成功後,纔可以再呼叫其他 Windows Sockets
DLL 的函數。此函數亦讓使用者可以指定要使用的 Windows Sockets
API 版本,及獲取設計者的一些信息。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章