码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程(续)

时间:2018-02-03 00:35:43      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:pre   分布   中国   forever   new   break   nec   重用   简单   

一,验证客户端链接的合法性

如果想在分布式系统中实现一个简单的客户端链接认证功能,可以利用hmac实现。

技术分享图片
import socket
import hmac
import os
secret_key=中国.encode(utf-8)               #设置密钥
sk=socket.socket()
sk.bind((127.0.0.1,8090))
sk.listen()

def chack_conn(conn):
    msg=os.urandom(32)                             #随机生成32个字节的bytes类型
    conn.send(msg)
    h=hmac.new(secret_key,msg)            
    digest=h.digest()
    client_digest=conn.recv(1024)
    return hmac.compare_digest(digest,client_digest)    #比较密文一致性

conn,addr=sk.accept()
res=chack_conn(conn)

if res:
    print(合法)
    conn.close()
else:
    print(不合法)
    conn.close()
sk.close()
服务端
技术分享图片
import hmac
import socket
secret_key=fgdf.encode(utf-8)
sk=socket.socket()
sk.connect((127.0.0.1,9090))
msg=sk.recv(1024)
h=hmac.new(secret_key,msg)
digest=h.digest()
sk.send(digest)
sk.close()
客户端

二,socketserver(实现和多个客户端链接交互)

import socketserver

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            #print(self.client_address)                         #获取IP地址和端口
            msg=self.request.recv(1024).decode(utf-8)
            if msg==q:break
            print(msg)
            info=input(%s%msg[0:2]+  >>>)
            self.request.send((爷爷 :+info).encode(utf-8))

if __name__==__main__:
    server=socketserver.ThreadingTCPServer((127.0.0.1,8090),MyServer)
    # server.allow_reuse_address=True            #端口重用
    server.serve_forever()

#地址(端口)重用可以多个socket绑定一个地址。
# 比如程序中有两个socket都要从某个地址的同一个端口接收数据。
# 一般情况下,绑定第一个socket后,第二个socket会绑定失败。
# 这时可以利用地址重用,在绑定端口之前调用。
#写法不变


import socket
sk=socket.socket()
sk.connect((127.0.0.1,8090))
while 1:
    info_cli=input(>>>)
    if info_cli==q:
        sk.send(bq)
        break
    sk.send((二娃 :+info_cli).encode(utf-8))
    d=sk.recv(1024).decode(utf-8)
    print(d)

客户端2

import socket
sk=socket.socket()
sk.connect((127.0.0.1,8090))

while True:
    msg=input(">>>")
    if msg==q:
        sk.send(bq)
        break
    sk.send((大娃 :+msg).encode(utf-8))
    see=sk.recv(1024).decode(utf-8)
    print(see)

 

网络编程(续)

标签:pre   分布   中国   forever   new   break   nec   重用   简单   

原文地址:https://www.cnblogs.com/glf1160/p/8386577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!