基于socketserver实现的并发(tcp和udp)
threading 线程 基于tcp协议:请求建立连接,然后开启进程 基于udp协议:直接开启新进程
基于tcp协议
import socketserver # 导入socketserver模块
# socketsever 把并发进程的方法封装
class MyHandler(socketserver.BaseRequestHandler): # 定义一个类,继承父类BaseRequestHandler
# 父类里有request和client_address 属性
def handle(self):
#通信循环
while True:
# print(self.client_address)
# print(self.request) #self.request=conn try:
data=self.request.recv(1024) # self.request = conn
if len(data) == 0:break
self.request.send(data.upper())
except ConnectionResetError:
break if __name__ == '__main__':
# s=socketserver.ThreadingTCPServer(请求处理类 服务端地址) s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyHandler,bind_and_activate=True)
print(s) # <socketserver.ThreadingTCPServer object at 0x000002164C8D4898> s.serve_forever() # 代表连接循环 # 循环建立连接,每建立一个连接就会启动一个线程(服务员)和
# 调用Myhandler类产生一个对象,调用该对象下的handle方法,专门与刚刚建立好的连接做通信循环
基于socketsever服务端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口 while True:
# msg=input('>>: ').strip() #msg=''
msg = 'client33333' # msg=''
if len(msg) == 0:continue
phone.send(msg.encode('utf-8'))
data=phone.recv(1024)
print(data) phone.close()
基于socketserver客户端
基于udp协议
import socketserver class MyHandler(socketserver.BaseRequestHandler):
def handle(self):
#通信循环
print(self.client_address)
print(self.request) # 元组形式,第一个是客户端发来的请求,第二个是套接字对象 data=self.request[0]
print('客户消息',data)
self.request[1].sendto(data.upper(),self.client_address) # 套接字对象(数据,客户端地址) # (b'client444444', <socket.socket fd=424, family=AddressFamily.AF_INET,
# type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)
# 客户消息 b'client444444'
# ('127.0.0.1', 54288) if __name__ == '__main__':
s=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyHandler)
s.serve_forever()
基于socketserver服务端
import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp while True:
# msg=input('>>: ').strip() #msg=''
msg='client444444' client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data) client.close()
基于socketserver客户端
基于socketserver实现的并发(tcp和udp)的更多相关文章
- 基于socketserver模块实现并发的套接字(tcp、udp)
tcp服务端:import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(self): #通信循环 ...
- Linux下基于Erlang的高并发TCP连接压力实验
1.实验环境: 联想小型机: 操作系统:RedHat Enterprise LinuxServer release6.4(Santiago) 内核版本号:Linux server1 2.6.32-35 ...
- 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket
目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...
- tcp上传大文件举例、udp实现qq聊天、socketserver模块实现并发
为什么会出现粘包现象(day31提到过,这里再举个例子) """首先只有在TCP协议中才会出现粘包现象,因为TCP协议是流式协议它的特点是将数据量小并且时间间隔比较短的数 ...
- udp套接字及利用socketserver模块实现并发以及并发编程
一:基于udp协议(数据报协议)的套接字:和tcp协议的套接字对比而言,由于udp是无链接的,所以先启动哪一端都不会报错,而且udp也不会有粘包 现象,所以对比下来,tcp协议的话传输数据更加可靠,但 ...
- 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块
网络编程协议 1.osi七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...
- 模拟ssh远程执行命令,粘包问题,基于socketserver实现并发的socket
06.27自我总结 1.模拟ssh远程执行命令 利用套接字编来进行远程执行命令 服务端 from socket import * import subprocess server = socket(A ...
- 轨迹系列——Socket总结及实现基于TCP或UDP的809协议方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在上一篇博客中我详细介绍了809协议的内容.809协议规范了通 ...
随机推荐
- Flume 和 kafka的区别和对比
定义: Flume:是Cloudera提供的一个分布式的海量日志采集.聚合和传输的系统: Kafka:是一种高吞吐量的分布式发布订阅消息系统: 各特点: 场景: Flume主要是和HDFS\HBase ...
- bzoj5483: [Usaco2018 Dec]Balance Beam
又又又又又又又被踩爆了 首先容易写出这样的期望方程:f(1)=max(d(1),f(2)/2),f(n)=max(d(n),f(n-1)/2), f(i)=max(d(i),(f(i-1)+f(i+1 ...
- Asp与Asp.Net
1.Asp是什么? ASP是动态服务器页面(Active Server Page)的英文缩写.是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具 ...
- 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火
题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...
- C#:template
ylbtech-C#: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbtech.cnbl ...
- vue项目中的路径别名
每次写引入组件的路径,如果路径嵌套比较深,那么会比较麻烦,我们可以在webpack.base.conf.js,中设置路径的别名,默认webpack设置src的别名为@ 建议配置src下一级目录的别名, ...
- RESTEasy使用json返回的例子
创建一个json的model类: package com.howtodoinjava.model; import java.io.Serializable; import javax.xml.bind ...
- class.forName()和.class有什么区别?
class.forName()会初始化类的成员(静态的),最先加载的是类的静态成员变量,然后是静态代码块. 访问常量并不会导致类的初始化,但是访问静态成员会.
- JAVA基础-面向对象06
一.封装 1. 封装概念和体现 封装:包装的意思,隐藏被封装的事物的信息:生活中的包装:快递:食品:电子产品……方便:好看易用:安全: Java程序中的包装: 类:包装了同一类事物的共性信息: 函数: ...
- E20170503-hm
leading edge 前沿 trailing edge 后缘 trail v跟踪 top edge 顶边 bottom edge 底边 intrinsic adj 固有的 intrinsi ...