python 并发编程
1,并发编程
1,什么是并发编程:在tcp协议中多个客户端访问同一个服务端的时候,由于tcp基本的网络连接方式是单线链接的,所以由此引出了并发编程,让多个客户端访问同一个服务端的情况就是并发编程。
2,socketserver模块的使用就是解决多客户端访问服务端的情况:
#并发编程需要注意的是服务端的接收,客户端按照以往的形式来就好
import socketserver
class Myserver(sockerserver.BaseRequestHandler):
def handler(self):
while True:
ret = self.resquest.recv(1024).decode('utf-8')#接收参数
print(ret)
self.request.send('hi'.encode('utf-8'))#此处不能使用input方式
if __name__ == '__main__':
socketserver.TCPServer.allow_reuse_address = True
server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
server.serve_forever()
#服务端的基本结构并发编程方式
#client端口
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
sk.send('nihaoi'.encode('utf-8'))
t = sk.recv(1024).decode('utf-8')
print(t)
sk.close()
2,验证客户端的合法性
#server端口
import socket
import os
import hashlib
secret_key = '老衲洗头用飘柔'.encode('utf-8')
sk= socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen()
conn,mag= sk.accept()
random_bytes = os.urandom(32) #传输一个32位数的随机数字
conn.send(random_bytes) #发送过去
md5 = hashlib.md5(secret_key) #利用hashilb算法加密加盐
md5.update(random_bytes) 加密
ret = md5.hexdigest()
end_recv = conn.recv(1024).decode('utf-8')
if end_recv == ret: #两边判断
print('合法客户端')
else:
print('不合法客户端')
conn.close()
sk.close()
#client
import socket
import hmac
secret_key = '老衲洗头用飘柔'.encode('utf-8')
sk= socket.socket()
sk.connect(('127.0.0.1',9000))
# random_bytes = os.urandom(32)
ret = sk.recv(1024)
md5 = hmac.new(secret_key,ret) 加密方式不同但是思路相同
rt = md5.hexdigest()
sk.send(rt.encode('utf-8'))
print('----------')
sk.close()

浙公网安备 33010602011771号