socketserver简单介绍

'''
socketserver:是对socket的封装,实现并发处理
前两个TCP,UDP常用,后两个不常用
'''
import socketserver socketserver.TCPServer(server_address="",RequestHandlerClass="",bind_and_activate=True) # TCP协议
socketserver.UDPServer(server_address="",RequestHandlerClass="",bind_and_activate=True) # UDP协议
socketserver.UnixStreamServer(server_address="",RequestHandlerClass="",bind_and_activate=True) # unix下tcp
socketserver.UnixDatagramServer(server_address="",RequestHandlerClass="",bind_and_activate=True) # unix下udp '''
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+ ''' '''
创建一个SocketServer分三步:
一、创建BaseRequestHandler的子类并重写handle()方法
二、实例化TCPServer(或其他三种),传递IP和上面创建的子类做为参数
三、server.handle_request() #处理一个请求,一般不用
server.serve_forever() # 处理多个请求
'''
'''
===============BaseServer的方法==============
fileno() 返回文件描述符
handle_request() 处理单个请求
serve_forever(poll_interval=0.5)
处理请求直到收到shutdown请求,每0.5秒检查一次是否发了shutdown
清理工作可以放在service_actions()里面
service_actions() shutdown之后的清理工作
shutdown() 停止
server_close() 关闭
allow_reuse_address()允许重用地址,看见过address already in use,
突然断开客户端没有断开,在socket上server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
timeout() handleRequest里面用的 self.setup() 请求进来前
try:
self.handle() 请求处理中
finally:
self.finish() 最后
'''

服务器:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
'''
跟客户端所有的交互都是在handle里完成的,每次请求都新建一个Handler实例
self.request 服务端收发数据的句柄
self.data 存放在实例里的数据
self.client_address[0] 客户端IP地址
'''
def handle(self):
while True:
try:
self.data = self.request.recv(1024).decode()
self.data = self.data.upper()
self.request.send(self.data.encode())
except ConnectionResetError as e:
print("连接断开",e)
break if __name__ == '__main__':
# server = socketserver.TCPServer(("127.0.0.1", 6969), MyTCPHandler) 跟之前的socket一样不支持并发
server = socketserver.ThreadingTCPServer(("127.0.0.1", 6969), MyTCPHandler) #多线程
# server = socketserver.ForkingTCPServer(("127.0.0.1", 6969), MyTCPHandler) #多进程,Linux里好使,Windows里不好使
server.serve_forever()

客户端:

import socket

client = socket.socket()
client.connect(("127.0.0.1",6969)) while True:
data = input(">>").strip()
client.send(data.encode())
data = client.recv(1024).decode()
print(data)

socketServer并发处理socket的更多相关文章

  1. python_way day10 python和其他语言的作用域 、 python2.7多继承和3.5多继承的区别 、 socket 和 socketserver源码(支持并发处理socket,多进程,多线程)

    python_way day10 1.python的作用域和其他语言的作用域 2.python2.7多继承和3.5多继承的区别 3.socket和socketserver源码(并发处理socket) ...

  2. 网络编程之socketserver以及socket更多方法

    关于socketserver 关于socket的更多方法 服务端套接字函数: s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始tcp监听 s.accept () 被动接受tc ...

  3. socketserver和socket的补充(验证客户端合法性)

    一.socket的补充 1.参数 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 参数说明: family 地址系 ...

  4. socket模块实现基于UDP聊天模拟程序;socketserver模块实现服务端 socket客户端代码示例

    socket模块 serSocket.setblocking(False) 设置为非阻塞: #coding=utf-8 from socket import * import time # 用来存储所 ...

  5. python 学习分享-socketserver

    SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端.即:每个客户端请求连接到服务器时,Socket服务端都会在服务器 ...

  6. 小菜学习Winform(三)Socket点对点通信

    前言 Socket的英文原义是“孔”或“插座”,其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个Socket号.一个插座,在网络编程中就是i ...

  7. Linux 网络编程七(非阻塞socket:epoll--select)

    阻塞socket --阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. --对于文件操作 read,fread函数调用会将线程阻塞(平常使用read感觉不出来阻塞, 因 ...

  8. C# Socket基础(一)之启动异步服务监听

    本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualRe ...

  9. Unity3d之Socket UDP协议

    原文地址:http://blog.csdn.net/dingkun520wy/article/details/49201245 (一)Socket(套接字)UDP协议的特点 1.是基于无连接的协议,没 ...

随机推荐

  1. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别

    ASP.NET的控件包括WEB服务器控件.WEB用户控件.WEB自定义控件.HTML服务器控件和HTML控件.HTML控件.HTML服务器控件和WEB服务器控件之间的区别如下所示.q      HTM ...

  2. PHP大法

    Topic Link http://ctf5.shiyanbar.com/DUTCTF/index.php Notes: 1) 进去发现 根据提示查看是否存在.txt文件,打开之后发现有东西 2)分析 ...

  3. 预测python数据分析师的工资

    前两篇博客分别对拉勾中关于 python 数据分析有关的信息进行获取(https://www.cnblogs.com/lyuzt/p/10636501.html)和对获取的数据进行可视化分析(http ...

  4. 基于 Nginx 的 HTTPS 性能优化实践

    前言 分享一个卓见云的较多客户遇到HTTPS优化案例. 随着相关浏览器对HTTP协议的“不安全”.红色页面警告等严格措施的出台,以及向 iOS 应用的 ATS 要求和微信.支付宝小程序强制 HTTPS ...

  5. Spring Boot 2.x (一):HelloWorld

    简介 本系列基于Spring Boot 2.1.0 的官方文档,除去了文档中一些冗余的东西,加上了一些自己的理解,意图是在于帮助更多初识Spring Boot的人来进行一次探险. 本系列建议具有Jav ...

  6. httpclient+jsoup实现小说线上采集阅读

    前言 用过老版本UC看小说的同学都知道,当年版权问题比较松懈,我们可以再UC搜索不同来源的小说,并且阅读,那么它是怎么做的呢?下面让我们自己实现一个小说线上采集阅读.(说明:仅用于技术学习.研究) 看 ...

  7. My操作小技巧

    1.当我们新增一条数据之后想要获取其自增长的id,可以紧随新增语句后调用 SELECT last_insert_id();即可获得,一般搭配变量一起使用 SELECT @newUserId:=last ...

  8. Linux下批量添加用户

    添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个.上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加, 必然要找一种简便的创建大量用户的方法. ...

  9. 分享一些 Windows 平台上的神器

    下面分享一些 Windows 平台上日常开发使用的软件,有些软件我自认为是神器,可以大大提高效率. 编辑器类软件 IntelliJ IDEA IntelliJ IDEA 内部集成 Java 开发环境, ...

  10. 预计2019年发布的Vue3.0到底有什么不一样的地方?

    摘要: Vue 3.0预览. 原文:预计今年发布的Vue3.0到底有什么不一样的地方? 作者:小肆 微信公众号:技术放肆聊 Fundebug经授权转载,版权归原作者所有. 还有几个月距离 vue2 的 ...