UDP协议&socketserver模块

一、UDP协议

1.1 UDP实现简单通信

服务器
-------------------------------------------------------------
import socket soc= socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #socket.SOCK_DGRAM是UDP协议 soc.bind(('127.0.0.1',8080)) #绑定地址和端口号 while True: #通信循环
data,addr = soc.recvfrom(1024) #无需等待接收和监听
print(data)
soc.sendto(data.upper(),addr) #将处理好的数据发送给客户端
客户端
------------------------------------------------------------
import socket soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #实例化一个对象 while True: #通信循环
msg= input('请输入数据>>>').strip() msg = msg.encode('utf8') #将数据转化为bytes格式 soc.sendto(msg,('127.0.0.1',8080)) data = soc.recvfrom(1024) #接收数据 print(data[0]) #打印数

1.2 UDP的特点

  • 可以发空内容(数据报协议,有数据头)
  • 不需要建连接(所以他不可靠)
  • 不回粘包
  • 不可靠(客户端,服务端谁断开都不影响发送消息)

1.3 UDP与TCP的区别

TCP UDP
可靠连接 不可靠连接
基于数据流的传输 基于数据报的传输
粘包 不粘包
不丢包 丢包

二、socketserver模块

可以实现并发编程,让多个客户端同时访问,服务器同时处理多个客户端发来的数据

2.1 socketserver模块实现TCP简单通信

服务端
-----------------------------------------------------------------------------------
import socketserver #导入模块 class MyTcp(socketserver.BaseRequestHandler): #继承一个类,带有Base的都是基类
def handle(self): #必须重写handle方法
try:
while True:
#request其实就是之前conn对象
data = self.request.recv(1024) #接收数据
if len(data)== 0: #如果数据发的是空
return #直接结束
self.request.send(data.upper()) #将数据变大写发送给客户端 except Exception:
pass if __name__ == '__main__':
#实例化一个socketserver对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据
soc= socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyTcp) #第一个参数是绑定的地址,第二个参数是自定义的类 soc.serve_forever() #只要来一个客户端,我们就给他一个线程做交互
客户端
-----------------------------------------------------------------------------
import socket #客户端不需要用socketserver来实现
soc = socket.socket()
soc.connect(('127.0.0.1',8080))
while True:
msg = input('请输入数据>>>').strip()
msg = msg.encode('utf8')
data= soc.send(msg)
print(soc.recv(1024))

2.2 socketserver模块实现UDP简单通信

服务器
--------------------------------------------------------------------------------------
import socketserver class MyUdp(socketserver.BaseRequestHandler):
def handle(self):
print(self.request[0]) #b'dfgh'
#<socket.socket fd=544, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>
print(self.request[1])
print(type(self.request[1])) #<class 'socket.socket'>
data = self.request[0].decode('utf8')
data = data.upper().encode('utf8')
# self.request(tcp / udp是不一样的)
self.request[1].sendto(data,self.client_address) #self.client_address客户端地址 if __name__ == '__main__':
soc = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUdp)
soc.serve_forever()
客户端
---------------------------------------------------------------------------------------
import socket soc = socket.socket(type = socket.SOCK_DGRAM) while True:
msg = input('请输入数据>>>').strip()
msg = msg.encode('utf8')
soc.sendto(msg,('127.0.0.1',8080))
data = soc.recvfrom(1024) #他是bytes形式
print(data[0].decode('utf-8')) #转为str格式

UDP协议&socketserver模块的更多相关文章

  1. (day27)subprocess模块+粘包问题+struct模块+ UDP协议+socketserver

    目录 昨日回顾 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议 socket套接字 今日内容 一.subprocess模块 二.粘包问题 三.struct模块 四.UDP 五.QQ聊天室 ...

  2. python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3

    异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...

  3. socketserver模块TCP和UDP协议形式

    # >>>>>>>>>>>>>>>>>>>>服务端socketserver模块通 ...

  4. 基于udp协议的套接字,socketserver模块,多道技术,进程理论

    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

  5. 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  6. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  7. 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  8. 网络编程(四)--基于udp协议的套接字、socketserver模块

    一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                  ...

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

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

随机推荐

  1. sh_01_列表基本使用

    sh_01_列表基本使用 name_list = ["zhangsan", "lisi", "wangwu"] # 1. 取值和取索引 # ...

  2. python实现一个朴素贝叶斯分类方法

    1.公式 上式中左边D是需要预测的测试数据属性,h是需要预测的类:右边式子分子是属性的条件概率和类别的先验概率,可以从统计训练数据中得到,分母对于所有实例都一样,可以不考虑,所有只需 ,返回最大概率的 ...

  3. nopCommerce4.10学习笔记——入门

    1.下载 千万不要去GitHub上下载,千万不要去GitHub上下载,千万不要去GitHub上下载!!!,重要的事情说3遍,说多了都是泪,你懂的 下载网址:https://www.nopcommerc ...

  4. linux下nohup日志切割方案

    1.nohup命令解释: a.语法:nohup [command] [args] [&] b.说明:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂 ...

  5. [BZOJ3611][Heoi2014]大工程(虚树上DP)

    3611: [Heoi2014]大工程 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 2464  Solved: 1104[Submit][Statu ...

  6. 分布式-信息方式-JMS大纲

     一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息, ...

  7. javascript模块化之CommonJS、AMD、CMD、UMD、ES6

    javascript模块化之CommonJS.AMD.CMD.UMD.ES6 一.总结 一句话总结: CommonJS是同步加载模块,用在服务端:AMD是异步加载模块,用于浏览器端 1.为什么服务器端 ...

  8. 一起学vue指令之v-pre

    一起学vue指令之v-pre 一起学 vue指令 v-pre  指令可看作标签属性 浏览器解析引擎遇到vue的插值符号时会自动解析,当你想输出不被解析的纯文本时,可以使用v-pre指令. 未使用v-p ...

  9. 一起学vue指令之v-html

    一起学vue指令之v-html 一起学 vue指令 v-html  指令可看作标签属性 某些情况下,我们点击百度搜索下一页,服务器应该就返回下一页的数据页面,包含其他资源链接等. 返回的数据的本质是一 ...

  10. Lognormal Distribution对数正态分布

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...