tcp網路程式-客戶端與服務端
阿新 • • 發佈:2019-01-06
一、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()