网络编程-day4

 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)

猜你喜欢

转载自www.cnblogs.com/274831730wang/p/10235212.html
今日推荐