api介面
講解int
socket
(int addressfamily, int type,
int protocol)
int
close
(int socketfiledescriptor)
socket 建立並初始化 socket,返回該 socket 的檔案描述符,如果描述符為 -1 表示建立失敗。
close 關閉 socket。
通常引數 addressfamily 是 ipv4(af_inet) 或 ipv6(af_inet6)。type 表示 socket 的型別,通常是流stream(sock_stream) 或資料報文datagram(sock_dgram)。protocol 引數通常設定為0,以便讓系統自動為選擇我們合適的協議,對於 stream socket 來說會是 tcp 協議(ipproto_tcp),而對於 datagram來說會是 udp 協議(ipproto_udp)。
int
bind
(int socketfiledescriptor,
sockaddr *addresstobind,
int addressstructlength)
將 socket 與特定主機位址與埠號繫結,成功繫結返回0,失敗返回 -1。
成功繫結之後,根據協議(tcp/udp)的不同,我們可以對 socket 進行不同的操作:
udp:因為 udp 是無連線的,繫結之後就可以利用 udp socket 傳送資料了。
tcp:而 tcp 是需要建立端到端連線的,為了建立 tcp 連線伺服器必須呼叫 listen(int socketfiledescriptor, int backlogsize) 來設定伺服器的緩衝區佇列以接收客戶端的連線請求,backlogsize 表示客戶端連線請求緩衝區佇列的大小。當呼叫 listen 設定之後,伺服器等待客戶端請求,然後呼叫下面的 accept 來接受客戶端的連線請求。
int
accept
(int socketfiledescriptor,
sockaddr *clientaddress, int
clientaddressstructlength)
接受客戶端連線請求並將客戶端的網路位址資訊儲存到 clientaddress 中。
當客戶端連線請求被伺服器接受之後,客戶端和伺服器之間的鏈路就建立好了,兩者就可以通訊了。
int
connect
(int socketfiledescriptor,
sockaddr *serveraddress, int
serveraddresslength)
客戶端向特定網路位址的伺服器傳送連線請求,連線成功返回0,失敗返回 -1。
當伺服器建立好之後,客戶端通過呼叫該介面向伺服器發起建立連線請求。對於 udp 來說,該介面是可選的,如果呼叫了該介面,表明設定了該 udp socket 預設的網路位址。對 tcp socket來說這就是傳說中三次握手建立連線發生的地方。
注意:該介面呼叫會阻塞當前執行緒,直到伺服器返回。
hostent* gethostbyname(char *hostname)
使用 dns 查詢特定主機名字對應的 ip 位址。如果找不到對應的 ip 位址則返回 null。
int
send
(int socketfiledescriptor, char
*buffer, int bufferlength, int flags)
通過 socket 傳送資料,傳送成功返回成功傳送的位元組數,否則返回 -1。
一旦連線建立好之後,就可以通過 send/receive 介面傳送或接收資料了。注意呼叫 connect 設定了預設網路位址的 udp socket 也可以呼叫該介面來接收資料。
int
receive
(int socketfiledescriptor, char
*buffer, int bufferlength, int flags)
從 socket 中讀取資料,讀取成功返回成功讀取的位元組數,否則返回 -1。
一旦連線建立好之後,就可以通過 send/receive 介面傳送或接收資料了。注意呼叫 connect 設定了預設網路位址的 udp socket 也可以呼叫該介面來傳送資料。
int
sendto
(int socketfiledescriptor,
char *buffer, int bufferlength, int
flags, sockaddr *destinationaddress, int
destinationaddresslength)
通過udp socket 傳送資料到特定的網路位址,傳送成功返回成功傳送的位元組數,否則返回 -1。
由於 udp 可以向多個網路位址傳送資料,所以可以指定特定網路位址,以向其傳送資料。
int
recvfrom
(int socketfiledescriptor,
char *buffer, int bufferlength, int
flags, sockaddr *fromaddress, int
*fromaddresslength)
從udp socket 中讀取資料,並儲存傳送者的網路位址資訊,讀取成功返回成功讀取的位元組數,否則返回 -1 。
由於 udp 可以接收來自多個網路位址的資料,所以需要提供額外的引數,以儲存該資料的傳送者身份。
socket網路程式設計介面常用函式
3.listen函式 4.accept函式 5.connect函式 6.recv函式 7.closesocket shutdown 函式 中斷連線 int socket socket int af,int type,int protocol af 位址資料族系 type 通訊方式 protocal ...
TCP套介面程式設計 Socket
tcp套介面程式設計 socket socket起源於unix,而unix linux基本哲學之一就是 一切皆檔案 都可以用 開啟open 讀寫write read 關閉close 模式來操作。我的理解就是socket就是該模式的乙個實現,socket即是一種特殊的檔案,一些socket函式就是對其...
socket程式設計常用函式總結
資料型別 int8 t 帶符號8位整數 uint8 t 無符號8位整數 sa family t 套介面位址結構的位址族 socklen t 長度,一般為uint32 t in addr t ipv4 位址,一般32位 in port t tcp udp 埠,一般16位 結構 struct in ad...