1 #服务端 2 import socketserver 3 4 class Myserver(socketserver.BaseRequestHandler): 5 6 def handle(self): 7 while 1: 8 from_client_msg = self.request.recv(1024) # self.request = conn 9 print(from_client_msg.decode('utf-8')) 10 msg = input('服务端说:') 11 self.request.send(msg.encode('utf-8')) 12 13 14 if __name__ == '__main__': 15 16 ip_port = ('127.0.0.1',8001) 17 18 server = socketserver.ThreadingTCPServer(ip_port,Myserver) 19 20 server.serve_forever()
# 客户端 import socket client = socket.socket() client.connect(('127.0.0.1',8001)) while 1: msg = input('客户端说>>>') client.send(msg.encode('utf-8')) from_server_msg = client.recv(1024) print(from_server_msg.decode('utf-8'))
1 # 验证合法连接的服务端 2 from socket import * 3 import hmac,os 4 5 secret_key=b'Jedan has a big key!' 6 def conn_auth(conn): 7 ''' 8 认证客户端链接 9 :param conn: 10 :return: 11 ''' 12 print('开始验证新链接的合法性') 13 msg=os.urandom(32)#生成一个32字节的随机字符串 14 conn.sendall(msg) 15 h=hmac.new(secret_key,msg) 16 digest=h.digest() 17 respone=conn.recv(len(digest)) 18 return hmac.compare_digest(respone,digest) 19 20 def data_handler(conn,bufsize=1024): 21 if not conn_auth(conn): 22 print('该链接不合法,关闭') 23 conn.close() 24 return 25 print('链接合法,开始通信') 26 while True: 27 data=conn.recv(bufsize) 28 if not data:break 29 conn.sendall(data.upper()) 30 31 def server_handler(ip_port,bufsize,backlog=5): 32 ''' 33 只处理链接 34 :param ip_port: 35 :return: 36 ''' 37 tcp_socket_server=socket(AF_INET,SOCK_STREAM) 38 tcp_socket_server.bind(ip_port) 39 tcp_socket_server.listen(backlog) 40 while True: 41 conn,addr=tcp_socket_server.accept() 42 print('新连接[%s:%s]' %(addr[0],addr[1])) 43 data_handler(conn,bufsize) 44 45 if __name__ == '__main__': 46 ip_port=('127.0.0.1',9999) 47 bufsize=1024 48 server_handler(ip_port,bufsize)
1 #验证合法连接的客户端 2 from socket import * 3 import hmac,os 4 5 secret_key=b'Jedan has a big key!' 6 def conn_auth(conn): 7 ''' 8 验证客户端到服务器的链接 9 :param conn: 10 :return: 11 ''' 12 msg=conn.recv(32) 13 h=hmac.new(secret_key,msg) 14 digest=h.digest() 15 conn.sendall(digest) 16 17 def client_handler(ip_port,bufsize=1024): 18 tcp_socket_client=socket(AF_INET,SOCK_STREAM) 19 tcp_socket_client.connect(ip_port) 20 21 conn_auth(tcp_socket_client) 22 23 while True: 24 data=input('>>: ').strip() 25 if not data:continue 26 if data == 'quit':break 27 28 tcp_socket_client.sendall(data.encode('utf-8')) 29 respone=tcp_socket_client.recv(bufsize) 30 print(respone.decode('utf-8')) 31 tcp_socket_client.close() 32 33 if __name__ == '__main__': 34 ip_port=('127.0.0.1',9999) 35 bufsize=1024 36 client_handler(ip_port,bufsize)