python通信模块库_python-基于UDP通信的套接字,socketserver模块的使用
一、基于UDP协议通信的套接字
udp是没有链接的,所以先启动哪一端都不会报错
importsocketserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)server.bind(('127.0.0.1',8082))whileTrue: data,client_addr=server.recvfrom(1024)print(data) server.sendto(data.upper(),client_addr)server.close()server
importsocketclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)whileTrue: msg=input('>>:').strip() client.sendto(msg.encode('utf-8'),('127.0.0.1',8082)) data,server_addr=client.recvfrom(1024)print(data)client
由于udp无连接,所以可以同时多个客户端去跟服务端通信(实现简单的并发,并不可靠)
importsocketclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)whileTrue: msg=input('>>:').strip() client.sendto(msg.encode('utf-8'),('127.0.0.1',8082)) data,server_addr=client.recvfrom(1024)print(data)client2
udp不会出现粘包现象,因为每个中就已经有了报头,这样对于接收端来说,容易区分处理。
udp的recvfrom是阻塞的,一个recvfrom(x)必须对唯一一个sendinto(y),收完了x个字节的数据就算完成,若是y>x数据就丢失,这意味着udp根本不会粘包,但是会丢数据,不可靠
二、socketserver模块
socketserver模块简化了编写网络服务程序的任务,是python标准库中很多服务器框架的基础。
socketserver中包含了两种类,一种为服务类(server class),一种为请求处理类(request handle class),前者主要做的是建立链接的过程,后者注重用户数据的处理
要实现一项服务,还必须派生一个handler class请求处理类,并重写父类的handle()方法。handle方法就是用来专门是处理请求的。该模块是通过服务类和请求处理类组合来处理请求的。SocketServer模块提供的请求处理类有BaseRequestHandler。
1.基于tcp协议通信
#服务端必须满足至少三点:#1. 绑定一个固定的ip和port#2. 一直对外提供服务,稳定运行#3. 能够支持并发importsocketserver#自定义类用来处理通信循环classMyTCPhanler(socketserver.BaseRequestHandler):defhandle(self):whileTrue:try: data= self.request.recv(1024)if len(data) == 0: break #针对linux系统 print('-->收到客户端的消息:', data) self.request.send(data.upper())exceptConnectionResetError:breakself.request.close()if __name__ == '__main__': server=socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTCPhanler) server.serve_forever()#链接循环server
from socket import *client=socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1', 8081))#通信循环whileTrue:#msg=input('>>: ').strip() #msg='' #if len(msg) == 0:continue #client.send(msg.encode('utf-8')) #client.send(b'') client.send('hello'.encode('utf-8')) #client.send(b'') #print('has send') data=client.recv(1024)#print('has recv') print(data)client.close()client1
from socket import *client=socket(AF_INET, SOCK_STREAM)client.connect(('127.0.0.1', 8081))#通信循环whileTrue:#msg=input('>>: ').strip() #msg='' #if len(msg) == 0:continue #client.send(msg.encode('utf-8')) #client.send(b'') client.send('hello'.encode('utf-8')) #client.send(b'') #print('has send') data=client.recv(1024)#print('has recv') print(data)client.close()client2
2.基于udp协议通信
importsocketserverclassMyUdphandler(socketserver.BaseRequestHandler):defhandle(self): data,sock=self.request sock.sendto(data.upper(),self.client_address)if __name__ == '__main__': server=socketserver.ThreadingUDPServer(('127.0.0.1',8081),MyUdphandler) server.serve_forever()server
from socket import *client=socket(AF_INET,SOCK_DGRAM)whileTrue: client.sendto(b'hello',('127.0.0.1',8081)) data,server_addr=client.recvfrom(1024)print(data)client1
from socket import *client=socket(AF_INET,SOCK_DGRAM)whileTrue: client.sendto(b'hello',('127.0.0.1',8081)) data,server_addr=client.recvfrom(1024)print(data)client2
焚膏油以继晷,恒兀兀以穷年。
python通信模块库_python-基于UDP通信的套接字,socketserver模块的使用相关推荐
- 基于UDP协议的套接字+socketserver模块
基于UDP协议的套接字 user datagram protocal 数据报协议 无双向通道.自带报头.类似发短信.不会粘包 不可靠:数据发送时,丢就丢了 UDP socket: 服务端: impor ...
- udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识
基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...
- python-基于UDP通信的套接字,socketserver模块的使用
一.基于UDP协议通信的套接字 udp是没有链接的,所以先启动哪一端都不会报错 import socketserver=socket.socket(socket.AF_INET,socket.SOCK ...
- pythonsocket自定义协议_python-基于UDP通信的套接字,socketserver模块的使用-阿里云开发者社区...
一.基于UDP协议通信的套接字 udp是没有链接的,所以先启动哪一端都不会报错 importsocket server=socket.socket(socket.AF_INET,socket.SOCK ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.socke ...
- python加密库_python基于pyDes库实现des加密的方法
本文实例讲述了python基于pyDes库实现des加密的方法.分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要 ...
- python socket 域名_Python网络编程中的套接字名和DNS解析。
距离上一次TCP的文章,这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理. 下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址 ...
- Qt使用UDp通信、套接字socket的成员函数bind()的作用
一. 所谓bind,就是指绑定本地接受端口. 指定ip,是为了分辨多ip主机.在有服务端和客户端的UDP中,bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即 ...
- day26-2 基于TCP协议的套接字编程
目录 基于TCP协议的套接字编程 套接字 套接字工作流程 基于TCP协议的套接字编程(简单) 服务端 客户端 基于TCP协议的套接字编程(循环) 服务端 客户端1 客户端2 基于TCP协议的套接字编程 ...
最新文章
- 通俗理解条件熵-数学
- Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- UA OPTI512R 傅立叶光学导论24 相干传递函数
- 怎么样条件需要做屏蔽机房,屏蔽机房建设标准是什么?
- 前端路由跳转丢失端口号_如何在应用架构中设计微前端方案 icestark
- 斜视术后融合训练方法_做斜视手术两年后又复发了怎么办?
- [BZOJ1602BZOJ1787BZOJ2144]树上LCA的算法巩固练习
- 易筋SpringBoot 2.1 | 第五篇:RestTemplate请求https(3)
- 离线版MSDN下载地址
- 矩阵的对数运算公式_对数(运算层面)
- 手机短信小额支付接口.Net实现
- centos7 查看本地ip地址
- html5制作颜色的诗句,带有颜色的诗句(精选60句)
- 安装TypeScript
- 脑机接口的过去、现在与未来
- [多媒体] 音频的左右声道
- 计算机计算资产分析表,财务指标计算公式excel,用EXCEL做财务指标分析,如何使用其他工作簿做公式计算??...
- 几何结构因子(Geometrical structure factor)和原子形状因子(atomic form factor)
- 【统计学】【2015.09】基于状态空间模型的时间序列预测与插值
- MySQL语句性能优化