一、SocketServer的几种类型

面向远程:
TCP 协议链接:socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True).
UDP 协议链接:socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True).

本地服务:

UnixStream:socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)

UnixDatagram:socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)

二、几种服务器的继承关系
+------------+
| BaseServer |
+------------+
|
v
+-----------+ +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+ +------------------+
|
v
+-----------+ +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+ +--------------------+
1.2 如何创建一个SocketServer 以Tcp为列

First:

创建一个请求处理类PersonalTcpHandle ,继承 BaseRequestHandler, 并且还有重写父类的handle()方法

Second:

必须实例化 TCPServer, 并传送服务端的 IP 、Port 和上面创建的请求处理类给这个TCPServer( (host, port), PersonalTcpHandle)

Thrid:

接着使用 server.handle_request() --->只执行一个请求

server.serve_forever() --->永远的执行下去,执行很多请求

二、’代码实现
import socketserver

class PersonalTcpHandle(socketserver.BaseRequestHandler):       #继承父类请求处理类

    """ 每来一个请求都会实例化一次这个类"""

    def handle(self):  #重写handle 方法,客户端来的所有请求都在这被处理响应
"""该类接受客户端发送的数据,并在处理后返回"""
self.data = self.request.recv(1024).strip() #这儿的 self.request 就是socket里面的 sock ,addr = server.accept() 里面的 sock
""" Do someing with self.data and then return the result to client"""
self.request.sendall('处理后的数据') #注意必须为bytes 类型 if __name__ == "__main__":
host, port = "localhost", 3309 server = socketserver.TCPServer((host, port), PersonalTcpHandle) #单线程
# server = socketserver.ThreadignTCPServer((host,port), PersonalTcpHandle) #多线程服务器, 建议使用
server.serve_forver(poll_interval= 1) #poll_interval 参数为每多少时间检查一次连接是否断开

这样就完成了一个多线程的TCPserver服务

Socket编程,SocketServer模块的更多相关文章

  1. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

  2. Python进阶----UDP协议使用socket通信,socketserver模块实现并发

    Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:

  3. 网络编程------socketserver模块以及socket模块的更多用法.

    socketserver模块 内置模块 (其实现原理为并发) socketserver这个模块主要是为了解决: TCP协议中,服务器不能同时连接多个客户端的问题 是处于socket抽象层和应用层之间的 ...

  4. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

  5. python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  6. socket 和 SocketServer 模块

    一 .Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket socket(TCP,IP)通常也称作"套接字",用于描述IP地址和端 ...

  7. (网络编程)socketserver模块服务端实现并发

    基于tcp的套接字(实现并发),关键就是两个循环,一个链接循环,一个通信循环 基于udp的套接字(不是正真意义上的并发,实现真并发) socketserver模块中分两大类:server类(解决链接问 ...

  8. python网络编程-socketserver模块

    使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...

  9. python_网络编程socketserver模块实现多用户通信

    服务端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): #在这个函数里面 ...

  10. python之socket编程(二)

    标签(空格分隔): socket编程 SocketServer解析 SocketServer内部使用I/O多路复用,多线程,多进程来实现客户端多并发访问Socket服务端,while循环时使用I/O多 ...

随机推荐

  1. emacs 利用 auto-complete 自动补齐

    emacs 利用 auto-complete 自动补齐 1,首先导入melpa,在文件~/.emacs中添加下面代码 (require 'package) (package-initialize) ( ...

  2. windows入侵

    一, ping 用来检查网 络是否通畅或者网络连接速度的命令.作为一个生 活在网络上的管理员或者黑 客来说, ping 命令是第一个必须掌握的 DOS 命令,所利用的原理是这样的网络上的机器都有唯一确 ...

  3. ESLint笔记

    ESLint是JavaScript的代码检查工具.因为JS是弱类型的语言,不需要编译,代码错误是在运行时调适的,所以需要个工具在编码的过程发现问题.ESLint的初衷是为了让程序员可以创建自己的检测规 ...

  4. ES5-ES6-ES7_解构赋值

    解构赋值的概念 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) 传统对变量赋值的方式,以前,为变量赋值,只能直接指定值. var a = 1; ...

  5. MySQL高级知识(一)——基础

    前言:MySQL高级知识主要来自尚硅谷中MySQL的视频资源.对于网上视频资源来说,尚硅谷是一个非常好的选择.通过对相应部分的学习,笔者可以说收益颇丰,非常感谢尚硅谷. 1.关于MySQL的一些文件 ...

  6. 【ZJOI2012】灾难

    [ZJOI2012]灾难 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学 ...

  7. centos 防火墙的操作

    systemctl start firewalld systemctl restart firewalld systemctl status firewalld systemctl enable fi ...

  8. centos7下kubernetes(6。运行应用)

    Deployment 从一个例子开始 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 kubectl get deploym ...

  9. Idea突然不停indexing的问题

    只要清理一下Idea的缓存和索引就可以了,在File-Invalidate Caches / Restart中,选择Invalidate and Restart,之后会重启Idea,然后就解决啦!

  10. 初学Python——介绍一些内置方法

    1.abs()求绝对值 a=abs(-10) print(a) # 输出:10 2.all() 用来检测列表元素是否全部为空.0.False print(all([0,5,4])) #当列表所有元素都 ...