socket函式詳解

2021-10-01 18:52:20 字數 1892 閱讀 2634

主要介紹: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 中的一切都是檔案,每個檔案都有乙個整數型...