Linux網路程式設計 搭建TCP通訊流程

2021-09-24 02:09:21 字數 2888 閱讀 6663

1.建立tcp通訊socket函式介面

int socket(int domain ,int type ,int protocol);

引數一 :網路層協議 af_inet   ipv4  internet protocols

引數二 :傳輸層協議 sock_stream 資料流 tcp

sock_dgram 資料報 dup

引數三 :屬性 預設為 0

return value :成功返回 new socket ( 新的網路檔案描述符) 失敗返回 error -1

2.設定伺服器資訊

#include 伺服器資訊結構體標頭檔案

在linux終端環境下檢視伺服器資訊結構體 命令 :gedit /usr/include/linux/in.h

/* structure describing an internet (ip) socket address. */

結構體描述乙個網路的socket位址

struct sockaddr_in
/*/網路ip位址/

struct in_addr ;
---------------ip位址轉換函式--------------

#include #include #include in_addr_t inet_addr(const char *cp);  //把字串型別的ip位址轉換成整形

char *inet_ntoa(struct in_addr in); //把整形的ip位址轉換成字串型別

ip位址一般形式是字串,需要成整形計算機識別

-----------大小端的轉換---------------

注意:網路通訊都是使用大端格式通訊的,目的是為了資料的完整性

#include

uint16_t htons(uint16_t hostshort); //本地序 -》 網路序

uint16_t ntohs(uint16_t netshort);//網路序 -》 本地序

3.鏈結到網路伺服器中

name

connect - initiate a connection on a socket
synopsis

#include /* see notes */

#include int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

返回值: 0 成功 -1 失敗

4.進行資料的讀寫 read/write

socket網路描述符和普通的網路描述副一樣,也可以進行讀寫操作,

當然,寫入的資訊是傳遞給另外乙個ip主機的,讀取則是接受其反饋資訊

從而利用讀寫操作進行通訊。

1)當讀取網路通訊描述符時沒有資料的話 讀 會阻塞

2)當寫不斷的往網路通訊描述符寫入資料沒有人去讀取資料時, 寫滿 則阻塞

3)當建立通訊後,某一方埠斷開鏈結,我們的讀操作就不會阻塞。

5.關閉通訊

1.建立tcp通訊socket

建立通訊socke獲取網路描述符和客戶端操作一樣

2.繫結本地網路中伺服器的資訊

#include /* see notes */

#include int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

引數一:需要繫結的伺服器socket

返回值:成功 0 失敗 -1

/* address to accept any incoming messages.*/

萬用ip位址,讓伺服器自動監聽並繫結本地網絡卡位址

ip位址設計0.0.0.0系統會自動檢測本地ip

#defineinaddr_any((unsigned long int) 0x00000000)
3.設定為監聽模式

把服務端設定為監聽模式,等待客服端鏈結資訊的來臨,並接受其資訊

#include /* see notes */

#include int listen(int sockfd, int backlog);

引數一:需要監聽服務socket

返回值: 成功 0 失敗 -1

4.接受對方的鏈結請求

(當沒有客戶端鏈結進來時accept或阻塞,直到到有客戶鏈結進來為止)

name

accept - accept a connection on a socket
synopsis

#include /* see notes */

#include int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

引數一:已經為監聽模式伺服器socket

引數三:成功儲存對方資訊的大小

返回值: 成功 accepted socket (接收客戶端網路描述符) 失敗 -1

這樣我們就搭建好客服端和服務端了,兩者之間經過三次握手就可以程序網路通訊了,值得我們注意的是,三次握手發生在connect 中。

Linux 網路程式設計 TCP

一 tcp通訊步驟 tcp伺服器部分 1 呼叫函式socket 建立乙個socket 2 設定sockaddr in資訊,如要連線伺服器的ip和埠等屬性 3 呼叫函式bind 繫結ip位址 埠等資訊到socket上 4 呼叫函式listen 設定允許的最大連線數 5 呼叫函式accept 等待來自客...

Linux 網路程式設計(TCP)

include include include include include include include include int main int argc,char argv bzero server addr,sizeof struct sockaddr in server addr.si...

linux網路程式設計 初探TCP

伺服器端等待客戶端連線,連線成功後,列印客戶端的ip和port,然後迴圈接收資料,緩衝區無資料就阻塞待待。include include include include include include include include include include define maxbuf 10 ...