struct模塊python
park("i",len(msg)) 把數字轉成4字節算法
unpack("i",bytes)[0] 把四字節轉換成長度網絡
server端 import struct import socket sk = socket.socket() sk.bind(('127.0.0.1',9090)) sk.listen() conn,addr = sk.accept() while True: s = input('>>>').encode('utf-8') pack_num = struct.pack('i',len(s)) conn.send(pack_num) conn.send(s) conn.close() sk.close()
client端 import socket import struct sk = socket.socket() sk.connect(('127.0.0.1',9090)) while True: pack_num = sk.recv(4) num = struct.unpack('i',pack_num)[0] ret = sk.recv(num) print(ret.decode('utf-8')) sk.close()
server端併發
import os import hmac import socket def auth(conn): msg = os.urandom(32) # # 生成一個隨機的字符串 conn.send(msg) # # 發送到client端 result = hmac.new(secret_key, msg) # 處理這個隨機字符串,獲得一個結果 client_digest = conn.recv(1024) # 接收client端處理的結果 if result.hexdigest() == client_digest.decode('utf-8'): print('是合法的鏈接') # 對比成功能夠繼續通訊 return True else: print('不合法的鏈接') # 不成功 close return False secret_key = b'alex_sb' sk = socket.socket() sk.bind(('127.0.0.1',9000)) sk.listen() conn,addr = sk.accept() if auth(conn): print(conn.recv(1024)) # 正常的和client端進行溝通了 conn.close() else: conn.close() sk.close()
client端dom
import hmac import socket def auth(sk): msg = sk.recv(32) result = hmac.new(key, msg) res = result.hexdigest() sk.send(res.encode('utf-8')) key = b'alex_s' sk = socket.socket() sk.connect(('127.0.0.1',9000)) auth(sk) sk.send(b'upload') # 進行其餘正常的和server端的溝通 sk.close()