Linux網路程式設計 簡易客戶端和服務端的實現

2021-10-07 02:57:02 字數 2369 閱讀 6013

服務端**

客戶端**

socket()—>建立套接字(用於監聽)

bind()------>繫結位址結構

listen()----->設定最大監聽套接字數量

accept()---->阻塞等待客戶端連線(返回乙個新的套接字用於通訊)

read()------->讀取資料

foo()--------->處理資料

write()------->寫回資料

close()------->返回第5步或結束通訊

socket()——>建立套接字(用於通訊)

connect()---->連線服務端

write()-------->傳送資料

read()--------->接受資料

close()------->返回第4步或結束通訊

q: 需要建立多少個套接字:

a: 至少需要三個套接字,其中乙個用於監聽,兩個分別用於客戶端和伺服器的通訊

q:為什麼客戶端沒有bind():

a: 客戶端當然也可以繫結struct sockaddr_in位址結構,沒有繫結時,系統會自動分配空閒的位址結構

ip位址呼叫ifconfig來檢視,替換**中的,埠號同樣可以自定義

accept()返回時其實就是三次握手完成時,關結束通訊時完成四次揮手,不過這些事情作業系統會幫我們完成,網路分層模型的上一層只要學會使用下一層提供的介面,不必在意下一層如何實現,網路程式設計一系列函式其實就是系統針對tcp協議提供的一些介面函式

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define serv_port 9527

void

my_err

(const

char

*str)

intmain

(int argc,

char

*ar**)

//繫結位址結構(ip & port)if(

bind

(listen_fd,

(struct sockaddr*

)&server_addr,

sizeof

(server_addr))==

-1)//設定最大監聽客戶端數量if(

listen

(listen_fd,

128)==-

1)//阻塞等待客戶端響應if(

(connect_fd =

accept

(listen_fd,

(struct sockaddr*

)&client_addr,

&len_client))==

-1)//列印客戶端資訊

printf

("client : ip = %s, port = %d\n"

,inet_ntop

(af_inet,

&client_addr.sin_addr.s_addr, client_ip,

sizeof

(client_ip)),

ntohs

(client_addr.sin_port));

while(1

)//printf("ret = %d\n", ret);

write

(connect_fd, buf, ret);}

close

(listen_fd)

;close

(connect_fd)

;return0;

}

#include

#include

#include

#include

#include

#include

#include

#define serv_port 9527

void

my_err

(const

char

*str)

intmain

(int argc,

char

*ar**)

//將套接字和客戶端建立連線if(

connect

(connect_fd,

(struct sockaddr*

)&server_addr,

sizeof

(server_addr))==

-1)while(1

)close

(connect_fd)

;return0;

}

Python網路程式設計客戶端

程式設計流程 1 建立套接字 2 建立連線 3 傳送資料 資料要用二進位制個數編碼 4 接收資料,並設定資料流大小 import socket clientsocket socket.socket socket.af inet,socket.sock stream 建立連線 伺服器的位址和埠 hos...

Linux 網路客戶端工具

ping命令 傳送icmp協議的echo request給目標主機 常用選項 hping命令 傳送tcp ip資料報給目標主機 yum list all grep hping hping3.x86 64 0.0.20051105 24.el7 epel pcp pmda shping.x86 64 ...

Python 簡易TCP客戶端

usr bin python coding utf 8 socket 程式設計 學習自 black hat python python programming for hackers and pentesters 簡單的tcp客戶端 target port 80 http協議預設埠 build a ...