socketServer,模块

Posted 胸不平$怎平天下

tags:

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

 

                        验证客户端链接的合法性:

hmac摘要模块:

server端:

import os
import socket
import hmac
def check_client(conn):
    secret_key = begg# 密钥
    send_str = os.urandom(32)
    conn.send(send_str)
    hmac_obj = hmac.new(secret_key,send_str)
    secret_ret = hmac_obj.digest()  #bytes类型
    if conn.recv(1024) == secret_ret:
        print(合法的客户端)
        return   True
    else:
        print(非法的客户端)
        return   False


sk = socket.socket()
sk.bind((127.0.0.1‘,8090))
sk.listen()

conn,addr = sk.accept()
ret = check_client(conn)
while ret:
    inp = input(>>>)
    conn.send(inp.encode(utf-8))
    msg = conn.recv(1024)
    print(msg.decode(utf-8))
conn.close()
sk.close()

 

client端:

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

recv = sk.recv(1024)
# 用和server端相同的手法对这个字符串进行摘要
secret_key = begg  # 密钥
hmac_obj = hmac.new(secret_key,recv)
ret = hmac_obj.digest()
sk.send(ret)
msg = sk.recv(1024)
if msg:
    print(msg.decode(utf-8))
    while True:
        inp = input(>>>)
        sk.send(inp.encode(utf-8))
        msg = sk.recv(1024)
        print(msg.decode(utf-8))
sk.close()

socketserver:

SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。

 

ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。

1、ThreadingTCPServer基础

使用ThreadingTCPServer:

  • 创建一个继承自 SocketServer.BaseRequestHandler 的类
  • 类中必须定义一个名称为 handle 的方法
  • 启动ThreadingTCPServer

 

以上是关于socketServer,模块的主要内容,如果未能解决你的问题,请参考以下文章

数据库:socketserver模块MySQL

python网络编程 socketserver模块

八. 网络编程( socketserver 模块 初级使用)

Python-SocketServer模块

socketserver模块使用与源码分析

Python 模块 socketserver 以及 线程进程