IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> socksetserver模块 -> 正文阅读

[网络协议]socksetserver模块

????????socketserver模块是标准库中的一个高级模块,它能够简化很多代码,帮我们处理一些繁琐的工作并使用类来编写应用程序。

socketserver模块类
TCP/UDPServer基础的网络同步TCP/UDP服务器

UnixStreamServer

UnixDatagramServer

基于文件的基础同步TCP/UDP服务器

ForkingMixIn

ThreadingMixIn

核心派出或线程功能:只用作mix-in类与一个服务器类配合实现一些异步特性,不能直接实例化这个类

ForkingTCPServer

ForkingUDPServer

ForkingMixIn与TCP/UDPServer的结合

ThreadingTCPServer

ThreadingUDPServer

ThreadingMixIn与TCP/UDPServer的结合

StreamRequestHandler

DatagramRequestHandler

实现TCP/UDP服务器的服务处理器

????????与socket模块编写的服务器循环不同,使用socketserver模块编写的服务器循环是事件驱动的,这意味着新的循环不会一直处于阻塞状态,只有在系统的事件发生时它才会工作。要实现服务,必须从StreamRequestHandler或DatagramRequestHandler中选择一个进行实例化并重新定义其中的handle()方法,然后可以通过将其中一个服务器类与请求处理程序类相结合来运行各种版本的服务。

服务器对象
fileno()返回服务器正在侦听的套接字的整数文件描述符????????
server_forever(interval=0.5)一直处理请求直到有明确的shutdown()请求,轮询每个interval秒关闭
setup()在handle()方法执行任何初始化操作之前调用,默认状态下不执行任何操作
handle()

必须能完成服务器请求所需的全部工作,默认状态下同样不执行任何操作,需要手动修改

其中有几个实例可供调用

self.request对流服务这是一个套接字对象,对数据报服务,这是一对字符串和套接字
self.client_address客户地址
self.server服务器实例

finish()在handle()执行所需清理操作的方法后调用,默认状态下不执行任何操作

? ? ? ? 一个简单的TCP服务器

from socketserver import(TCPServer as TCP,StreamRequestHandler as SRH)

HOST=''
PORT=17025
ADDR=(HOST,PORT)

class SHandler(SRH):
    def handle(self):
        print('connect from:',self.client_address)
        self.wfile.write(('do you mean %s ?' %(self.rfile.readline()).decode().strip()).encode())#self.rfile和self.wfile属性可以被读取或写入,以此获得请求的数据或者将数据返回给客户端
        
tcps=TCP(ADDR,SHandler)
print('waiting for connection...')
tcps.serve_forever()

? ? ? ? 当接收到一个来自客户端的消息时,服务器就会调用handle()方法。StreamRequestHandler类将输入和输出看作类似文件的对象,因此用readline()来获取客户端消息,并利用write()将字符串写入wfile后发送给客户端

????????相较于服务器,客户端没有太大的改变,只是发送格式需要针对服务器的读取形式做出相应改变

from socket import *
HOST='localhost'
PORT=17025
BUUFSIZE=1024
ADDR=(HOST,PORT)

while True:
    tcpc=socket(AF_INET,SOCK_STREAM)
    tcpc.connect(ADDR)
    data=input('>')
    if not data:
        break
    tcpc.send(('%s\r\n' % data).encode())
    data=tcpc.recv(BUUFSIZE)
    print(data.decode('utf-8').strip())

? ? ? ?运行结果:


?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 00:25:09  更:2021-07-14 00:25:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/29 9:37:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码