网络编程(续)

Posted 一种清孤不等闲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程(续)相关的知识,希望对你有一定的参考价值。

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

如果想在分布式系统中实现一个简单的客户端链接认证功能,可以利用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)

 

以上是关于网络编程(续)的主要内容,如果未能解决你的问题,请参考以下文章

Android 多线程下载,断点续传,线程池

超大文件上传和断点续传的源代码

超大文件上传和断点续传的源代码

python编程获取续蜀山剑侠传:从目录名称网址到内容

python编程获取续蜀山剑侠传:从目录名称网址到内容

结对项目-地铁出行路线规划程序(续)