主要介紹:socket、bind、listen、connect、accept、send、sendto、recv、recvfrom、close、shutdown
網路中的程序是通過socket來通訊的,那什麼是socket呢?socket起源於unix,而unix/linux基本哲學之一就是「一切皆檔案」,都可以用「開啟open –> 讀寫write/read –> 關閉close」模式來操作。我的理解就是socket就是該模式的乙個實現,socket即是一種特殊的檔案。
其在linux和windows環境下的標頭檔案主要是:#include和#include
下面較為詳細的介紹各個函式的使用方法,及返回值判斷和處理。另外,若想對函式呼叫後核心的詳細動作過程,可參考unix網路程式設計第一卷或tcpip詳解第二卷。
socket
intsocket(int domain,int type, int protocol)
_________________________返回值:非負描述符 – 成功,-1 - 出錯
其中:family指明了協議族/域,通常af_inet、af_inet6、af_local等;
type是套介面型別,主要sock_stream、sock_dgram、sock_raw;
protocol一般取為0。成功時,返回乙個小的非負整數值,與檔案描述符類似。
對於windows環境下,在呼叫該函式之前需首先呼叫wsastartup函式完成對winsock服務的初始化,如
#include
wsadata wdata;
if ( wsastartup(makeword(2,2), &wdata) !=0 );
不過由於系統的相容性,我們一般不用這個標頭檔案,而使用另外乙個結構(struct sockaddr_in) 來代替.在中有sockaddr_in的定義
struct sockaddr_in
我們主要使用internet所以sin_family一般為af_inet,sin_addr設定為inaddr_any表示可以和任何的主機通訊,sin_port是我們要監聽的埠號.sin_zero[8]是用來填充的. bind將本地的埠同socket返回的檔案描述符**在一起.成功是返回0,失敗的情況和socket一樣
int listen(int sockfd,int backlog)
sockfd:是bind後的檔案描述符.
backlog:設定請求排隊的最大長度.當有多個客戶端程式和服務端相連時, 使用這個表示可以介紹的排隊長度. listen函式將bind的檔案描述符變為監聽套接字.返回的情況和bind一樣.
int accept(int sockfd, struct sockaddr *addr,int *addrlen)
sockfd:是listen後的檔案描述符.
addr,addrlen是用來給客戶端的程式填寫的,伺服器端只要傳遞指標就可以了. bind,listen和accept是伺服器端用的函式,accept呼叫時,伺服器端的程式會一直阻塞到有乙個客戶程式發出了連線. accept成功時返回最後的伺服器端的檔案描述符,這個時候伺服器端可以向該描述符寫資訊了. 失敗時返回-1
int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
sockfd:socket返回的檔案描述符.
serv_addr:儲存了伺服器端的連線資訊.其中sin_add是服務端的位址
addrlen:serv_addr的長度
connect函式是客戶端用來同服務端連線的.成功時返回0,sockfd是同服務端通訊的檔案描述符失敗時返回-1
總的來說網路程式是由兩個部分組成的–客戶端和伺服器端.它們的建立步驟一般是:
伺服器端
socket–>bind–>listen–>accept
客戶端socket–>connect
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...
socket 函式用法詳解 建立套接字
不管是 windows 還是 linux,都使用 socket 函式來建立套接字。socket 在兩個平台下的引數是相同的,不同的是返回值。在 socket是什麼 一節中我們講到了 windows 和 linux 在對待 socket 方面的區別。linux 中的一切都是檔案,每個檔案都有乙個整數型...