1. 程式人生 > >tcp網路程式-客戶端與服務端

tcp網路程式-客戶端與服務端

一、tcp客戶端構建流程

tcp的客戶端要比伺服器端簡單很多,如果說伺服器端是需要自己買手機、查手機卡、設定鈴聲、等待別人打電話流程的話,那麼客戶端就只需要找一個電話亭,拿起電話撥打即可,流程要少很多
示例程式碼:

from socket import *

# 建立socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM)

# 目的資訊
server_ip = input("請輸入伺服器ip:")
server_port = int(input("請輸入伺服器port:"))

# 連結伺服器
tcp_client_socket.connect((server_ip, server_port))

# 提示使用者輸入資料
send_data = input("請輸入要傳送的資料:")

tcp_client_socket.send(send_data.encode("gbk"))

# 接收對方傳送過來的資料,最大接收1024個位元組
recvData = tcp_client_socket.recv(1024)
print('接收到的資料為:', recvData.decode('gbk'))

# 關閉套接字
tcp_client_socket.close()

二、tcp伺服器構建流程

1. 生活中的電話機

如果想讓別人能更夠打通咱們的電話獲取相應服務的話,需要做以下幾件事情:
買個手機
插上手機卡
設計手機為正常接聽狀態(即能夠響鈴)
靜靜的等著別人撥打

2. tcp伺服器

如同上面的電話機過程一樣,在程式中,如果想要完成一個tcp伺服器的功能,需要的流程如下:
socket建立一個套接字
bind繫結ip和port
listen使套接字變為可以被動連結
accept等待客戶端的連結
recv/send接收發送資料
一個很簡單的tcp伺服器如下:

from socket import *

# 建立socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)

# 本地資訊
address = ('', 7788)

# 繫結
tcp_server_socket.bind(address)

# 使用socket建立的套接字預設的屬性是主動的,使用listen將其變為被動的,這樣就可以接收別人的連結了
tcp_server_socket.listen(128)

# 如果有新的客戶端來連結伺服器,那麼就產生一個新的套接字專門為這個客戶端服務
# client_socket用來為這個客戶端服務
# tcp_server_socket就可以省下來專門等待其他新客戶端的連結
client_socket, clientAddr = tcp_server_socket.accept()

# 接收對方傳送過來的資料
recv_data = client_socket.recv(1024)  # 接收1024個位元組
print('接收到的資料為:', recv_data.decode('gbk'))

# 傳送一些資料到客戶端
client_socket.send("thank you !".encode('gbk'))

# 關閉為這個客戶端服務的套接字,只要關閉了,就意味著不能再為這個客戶端服務了,如果還需要服務,只能再次重新連線
client_socket.close()