一、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. C#获取日期的星期名称

    private string GetWeekName(DayOfWeek week) { string weekName = ""; switch (week) { case Da ...

  2. 通用Logging框架设计

    项目开发中,大家都会使用日志框架(LogBack, log4j , java.util.logging 等).下面来简单的了解一下日志框架的大体设计思路. 类图:

  3. June 16. 2018, Week 24th. Saturday

    Success is the ability to go from one failure to another with no loss of enthusiasm. 成功,就是即使经历过一个又一个 ...

  4. Java抽象类(Abstract Class)与接口(Interface)区别

    抽象类与接口比较 抽象类跟接口类似,都不能实例化,可能包含不需实现方法或已实现的方法. 抽象类可以定义一些不是静态或常量的字段,定义 public, protected, private访问级别的具体 ...

  5. webpack模块定义和使用的模式

    在使用webpack作为模块加载工具时,我在想module.exports的模块应该是一种什么模式,最直接地思考是单例.不太确定,所以写一个简单例子做测试. 测试代码 singleton.js: va ...

  6. 【C编程基础】多线程编程

    基础知识 1.基本概念 (1)线程,即轻量级进程(LWP:LightWeight Process),是程序执行流的最小单元. 线程是进程中的一个实体,是被系统独立调度和分派的基本单位. (2)线程同步 ...

  7. ORM-面向对象&关系数据库

    ORM-面向对象&关系数据库 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程 ...

  8. 局域网下Android与scoket通信的实现

    因为最近实验室项目要求实现在局域网下将android app数据发送到winsock中进行保存,所以对此进行了简单学习.pc端因为是另一个同学做的,所以不做说明. 在android端,首先添加权限: ...

  9. [1] 从零开始 TensorFlow 学习

    计算图的基本概念 TensorFlow 的名字中己经说明了它最重要的两个概念一一Tensor 和 Flow Tensor: 张量(高阶数组,矩阵为二阶张量,向量为一阶张量,标量为零阶张量) Flow: ...

  10. Quartz Cron表达式详解

    转:https://www.jianshu.com/p/f03b1497122a 本文包含如下内容 CronTrigger简介 Cron 表达式 Cron表达式可选的值 Cron表达式的配置规则 Cr ...