多线程socketserver
模块:socketserver
tcp协议:
服务端:
import socketserver
class MyRequestHandle(socketserver.BaseRequestHandler):
def handle(self):
# print(self.request) #如果tcp协议,self.request = conn
print(self.client_address)
while True:
try:
msg = self.request.recv(1024)
if msg == 0:break
print(msg.decode('utf8'))
self.request.send(msg.upper())
except Exception:
break
self.request.close()
#服务端应该做的两件事
#第一件事:循环的从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s = socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyRequestHandle)
s.serve_forever()
#等同于:
# while True:
# conn,client_addr = server.accept() 每建立一个链接都会启动一个线程
#启动一个线程(conn,client_addr)
#第二件事:拿到链接对象,与其进行通信循环===》handle
客户端:
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议--> tcp协议
client.connect(('127.0.0.1',8081)) #进行3次握手
while True:
msg = input('输入要发送的消息:').strip()
if len(msg) == 0:continue #解决输入空格的bug
client.send(msg.encode('utf8')) #编码以二进制的形式发送
res = client.recv(1024)
print(res.decode('utf8'))
client.close()
udp协议:
服务端:
import socketserver
class MyRequestHanlde(socketserver.BaseRequestHandler):
def handle(self):
client_data = self.request[0]
print('客户端发来的数据%s'%client_data) #元组中第一个内容
server = self.request[1] #套接字对象
client_address = self.client_address #ip+接口
server.sendto(client_data.upper(),client_address) #转成大写形式返回
s = socketserver.ThreadingUDPServer(('127.0.0.1',8090),MyRequestHanlde)
s.serve_forever()
#相当于只负责循环的收
用户端:
from socket import *
slient = socket(AF_INET,SOCK_DGRAM)
while True:
msg = input('>>>>:').strip()
slient.sendto(msg.encode('utf8'),('127.0.0.1',8090))
res = slient.recvfrom(1024)
print(res)
slient.close()
多线程socketserver的更多相关文章
- 网络编程 多线程/socketserver模块/ threading.local
线程:进程中负责程序执行的执行单元. 多线程:在1个进程中存在多个线程. 进程只是用来把资源集中在一起,而线程才是cpu上的执行单位. 每个进程都会默认有一个控制线程也叫作主线程. 进程之间是竞争关系 ...
- day 30 多线程 socketserver模块补充
内容回顾: socket 模块 服务端:收发数据 - > accept/recv 客户端:收发数据 -> connect/recv 1. 考试题 1. 解释性和编译型 编译型: 先把代码编 ...
- 网络编程--多线程 , socketserver
内容补充 python2与python3的区别? """ python3对unicode字符的原生支持 Python2中使用ASCII码作为默认编码方式导致string有 ...
- python socket和socketserver
Python提供了两个基本的socket模块.一个是socket,它提供了标准的BSD Socket API:另一个是socketServer,它提供了服务器中心类,可以简化网络服务器的开发. 下面先 ...
- Python网络编程03----Python3.*中socketserver
socketserver(在Python2.*中的是SocketServer模块)是标准库中一个高级别的模块.用于简化网络客户与服务器的实现(在前面使用socket的过程中,我们先设置了socket的 ...
- Python3 socketserver模块
socketserver(在Python2.*中的是SocketServer模块)是标准库中一个高级别的模块.用于简化网络客户与服务器的实现(在前面使用socket的过程中,我们先设置了socket的 ...
- python2.0 s12 day8 _ socketserver学习
Socket 概念 一个socket就是一个点对点的链接.当今,大多数的通信都是基于Internet Protocl,因此大多数的网络Socket都是Internet Protocl(互联网)的通信( ...
- python 学习笔记九 队列,异步IO
queue (队列) 队列是为线程安全使用的. 1.先入先出 import queue #测试定义类传入队列 class Foo(object): def __init__(self,n): self ...
- socket基础
一.socket简介 1. 套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和 ...
- 【Python自动化运维之路Day9】Socket
socket也可以认为是套接字是一种源IP地址和目的IP地址以及源端口号和目的端口号的组合.网络化的应用程序在开始任何通讯之前都必须要创建套接字.就像电话的插口一样,没有它就没办法通讯. socket ...
随机推荐
- 第15章 授权:保护您的应用程序(ASP.NET Core in Action, 2nd Edition)
本章包括 使用授权控制谁可以使用你的应用 对策略使用基于声明的授权 创建自定义策略以处理复杂的需求 根据所访问的资源授权请求 隐藏用户未经授权访问的Razor模板中的元素 在第14章中,我向您展示了如 ...
- sqlite3 replace函数服务器端替换一个字段中数据的例子 ;拼接字段字符串
1.把字段filePath中所有类似 '/usr/local/Trolltech/%'的字符串都替换成 '/zzzzz/' update EstDlpFileAttribute set ...
- c#下载蓝奏云链接文件
控制台版本,winform更简单 static string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Des ...
- ping 的七种用法【搬运】
原作者:Pheenet菲尼特 原地址:https://www.toutiao.com/a6783191796659782148/?tt_from=weixin&utm_campaign=cli ...
- oracle从1到10生成顺序号
oracle从1到10生成顺序号,脚本案例如下: select 'ABAB'|| lpad(level,5,0) as serial_no from dual connect by level< ...
- Integer类自动拆箱,装箱解析
1.自动拆箱 例1: int i1 = 10; Integer i2 = new Integer(10); System.out.println(i1 == i2); 这个结果是true i1为基本数 ...
- HTTP 认证授权技术归纳
原文:https://coolshell.cn/articles/19395.html
- Win10 下Cisco AnyConnect Secure Mobility Client问题(转)
原文地址:http://blog.sina.com.cn/s/blog_66b9ff210102vup0.html 从WIN8升级到WIN10 ,Cisco AnyConnect ...
- maven常用镜像源
<mirrors> <mirror> <id>ibiblio</id> <mirrorOf>central</mirrorOf> ...
- win 11 VMware workstations b不可恢复的错误(vcpu-2)
首先检查一下电脑有没有开启CPU虚拟化,我的已经开启了,按照百度的方法去控制面板卸载程序里面,找到VMware 右击更改 弹出的安装程序点修复,,结果修复出错了,显示写入文件D:\vm\glib-2. ...