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)
  • 相关阅读:
    firFox的HttpRequest插件的使用
    注解事务
    log4j配置说明
    对反射用法的初探
    关于set集合和Iterator迭代器的使用
    Eclipse的使用
    各种地图坐标系转换工具
    day67-CSS字体属性、文字属性、背景属性、css盒子模型
    day66-CSS伪类选择器和伪元素选择器
    day65-CSS选择器和样式优先级
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9663066.html
Copyright © 2011-2022 走看看