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. JavaWeb_Servlet生命周期

    菜鸟教程 传送门 Servlet生命周期 package com.Gary.servlet; import java.io.IOException; import javax.servlet.Serv ...

  2. R_Studio(关联)对Groceries数据集进行关联分析

    RGui的arules程序包里含有Groceries数据集,该数据集是某个杂货店一个月真实的交易记录,共有9835条消费记录,169个商品 #install.packages("arules ...

  3. python学习之路(14)

    通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...

  4. MongoDB4和MysSQL5.7的读/写和事务处理速度简单对比

    系统环境: Ubuntu 18.04 数据库 MysSQL5.7/MongoDB4.0 插入的数据为随机生产,不重复. MySQL使用的连接库是 sqlalchemyMongoDB使用的连接库是pym ...

  5. for循环遍历对比

    1.for(var i=0; i<10; i++):遍历数组 var arr = ['11', '22']; for(var i=0; i<arr.length;i++){ console ...

  6. 全排列函数next_permutation(a,a+n)

    #include<iostream> #include<algorithm> using namespace std; int main(){ ]; int n; cin> ...

  7. leetcode-easy-sorting and searching- 278 First Bad Version

    mycode  96.42 # The isBadVersion API is already defined for you. # @param version, an integer # @ret ...

  8. 浏览器端-W3School-HTML:HTML DOM Base 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Base 对象 1.返回顶部 1. HTML DOM Base 对象 Base 对象 Base 对象代表 HTML 的 base ...

  9. emqtt emq 的用户密码认证

    MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启 ...

  10. loadrunner设置Analysis分析时去掉思考时间

    在进行对loadrunner进行执行脚本的情况下,那么就需要在脚本中进行添加为思考时间,这样才更符合人为的脚本时间,那么在进行执行压力的过程中,思考时间是需要开启的,完成之后为了便于分析那么就需要把思 ...