zoukankan      html  css  js  c++  java
  • Day31 python基础--网络编程基础-socketserver

    一,验证客户端合法性

    #server端
    import os
    import hmac
    import socket
    secret_key = b'alex_sb'
    
    def auth(conn):
        msg = os.urandom(32) #生成一个随机的字符串
        conn.send(msg)   #发送到client端
        result = hmac.new(secret_key,msg)  #处理这个随机字符串,得到一个结果
        client_digest = conn.recv(1024)   #接收client端处理的结果
        if result.hexdigest() == client_digest.decode('utf-8'):
            print('是合法的连接')   #对比成功可以继续通信
            return True
        else:
            print('不合法的连接')   #成功close
            return False
    
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    conn,addr = sk.accept()
    if auth(conn):
        print(conn.recv(1024))
        #正常的和client端进行沟通了
        conn.close()
    else:
        conn.close()
    sk.close()
    #client端
    import hmac
    import socket
    key = b'alex_sb'
    def auth(sk):
        msg = sk.recv(32)
        result = hmac.new(key,msg)
        res = result.hexdigest()
        sk.send(res.encode('utf-8'))
    
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    auth(sk)
    sk.send(b'upload')
    # 进行其他正常的和server端的沟通
    sk.close()

    二,socketserver

    import socketserver
    #tcp协议的server端就不需要导入socket
    # socketserver:进一步封装
    #
    # socket 底层模块
    
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            conn = self.request
            while True:
                conn.send(b'hello')
                print(conn.recv(1024))
    
    server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
    server.serve_forever()
    #server端
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    while True:
        conn,addr = sk.accept()
        while True:
            conn.send(b'hello')
            print(conn.recv(1024))
    
    
    #client端
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    while True:
        ret = sk.recv(1024)
        print(ret)
        sk.send(b'byebye')
    sk.close()

    三,blocking阻塞

    # blocking 阻塞
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.setblocking(False)
    sk.listen()
    while 1:
        try:
            conn,addr = sk.accept() #如果没有人来连接我,我就不在这里等待,非阻塞
            print(sk)
            break
        except BlockingIOError:
            pass
    conn.recv(1024)
  • 相关阅读:
    泛在电力物联网建设路线
    如何建设泛在电力物联网?
    泛在电力物联网到底该怎么建?
    泛在电力物联网(能源互联网+物联网)浅析
    泛在电力物联网分析—架构形式
    泛在电力物联网:两个业务 两种发展逻辑
    国网“泛在电力物联网”的战略与逻辑
    MVC中使用Hangfire按秒执行任务
    hangfire 实现已完成的job设置过期,防止数据无限增长
    解决ASP.NET Core部署到IIS,更新项目"另一个程序正在使用此文件,进程无法访问"
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9663066.html
Copyright © 2011-2022 走看看