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()

 

 

 

posted @ 2018-05-16 22:45  残烛月夜  阅读(155)  评论(0编辑  收藏  举报