1. 程式人生 > 實用技巧 >Python黑帽進階之路03|TCP服務端

Python黑帽進階之路03|TCP服務端

TCP服務端

import socket
import threading

server_ip = '0.0.0.0' #服務端ip,本地客戶端可訪問127.0.0.1
server_port = 9999 #開放的埠

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #新建socket,發現服務端與客戶端都是有socket物件生成的

server.bind((server_ip,server_port)) #socket建立服務端

listen_num = 5 #設定最大連線數

server.listen(listen_num) 
#服務端開啟監聽狀態 print('客戶端已開啟,最大連線數為%d,請訪問 %s:%d' % (listen_num,server_ip,server_port)) def handel_client(client_socket): #構造多執行緒函式,用於列印客戶端內容與回覆 request = client_socket.recv(1024) #接收客戶端傳送的資訊 print('接收到內容:%s' % request) #列印接收的資訊 client_socket.send('朕知!'.encode()) #向客戶端返回資訊 client_socket.close() #
關閉與客戶端的連線 while True: #一直保持服務端執行 client , addr = server.accept() #這裡服務端開始接收客戶端的連線物件 print('有新的連線:%s:%d'%(addr[0],addr[1])) client_header = threading.Thread(target=handel_client,args=(client,)) #將新連線的客戶端放到多執行緒函式中構造一個新物件 client_header.start() #執行執行緒任務(顯示內容與響應)

這裡可以拿我們前面的TCP客戶端與其通訊,本地連線地址:127.0.0.1,埠號為9999。TCP客戶端與伺服器本質上都是socket物件,伺服器端用到了bind()函式來新建服務。

伺服器:

客戶端已開啟,最大連線數為5,請訪問 0.0.0.0:9999
有新的連線:127.0.0.1:58493
接收到內容:b'GET / HTTP/1.1 Host:baidu.com'

TCP客戶端接收到的響應內容:

b'\xe6\x9c\x95\xe7\x9f\xa5\xef\xbc\x81'