面向对象编程(UDP协议)
UDP协议
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
服务端
'''
UDP 协议 又称 数据报协议 SOCK_DGRAM '''
from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket. server = socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8080)) # IP和端口 要绑定 服务端固定的IP端口
# server.listen() # 不需要 挂起的链接数 udp 没连接 # server.accept() # 不需要 因为udp就没连接
# while True:
# conn,addr = server.accept() # 干连接循环的活 while True:
data,client_addr = server.recvfrom(1024)
print('客户端数据:',data) # 我要知道谁给我发的
'''
(b'data', ('127.0.0.1', 51182))
(b'hello', ('127.0.0.1', 51182))
'''
server.sendto(data.upper(),client_addr) server.close()
客户端
'''
udp 可以发空 数据报协议 说是发空,其实不是空 ,还有一个IP 端口的信息,发空时 带个端口信息
tcp:不是一一对应的
udp:是一一对应的 数据报 完整的
'''
from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket. client = socket(AF_INET,SOCK_DGRAM)
# server.bind('127.0.0.1',8080) # IP和端口 要绑定 服务端固定的IP端口
# server.listen() # 不需要 挂起的链接数 udp 没连接 # server.accept() # 不需要 因为udp就没连接
# while True:
# conn,addr = server.accept() # 干连接循环的活 while True:
msg = input('>>>:').strip() # udp 可以发空 收到一个空
# if not msg:continue
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080)) # 明确的指定发给谁 因为没有连接了 data,server_addr = client.recvfrom(1024)
print('服务端返回的数据:',data,'服务端的地址:',server_addr)
server.close()
不会粘包的UDP
服务端
# -*- coding:utf-8 -*-
'''
UDP 协议 又称 数据报协议 SOCK_DGRAM
sendto recvfrom 一一对应 数据报协议 没有粘包问题 udp 数据不安全 有可能发送数据 > 1024 或者网络异常 数据没了
tcp: 数据一定要可靠
远程执行命令
下载文件
udp协议:
查询操作eg:互联网上 查询时间 ntp时间服务器 udp协议 eg:查域名 转成ip 端口 dns服务器走的就是udp协议 能保证查询效率高 数据虽然不可靠
ntp时间服务器 dns服务器 qq 都是udp
'''
# from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket.
#
# server = socket(AF_INET,SOCK_DGRAM)
# server.bind(('127.0.0.1',8080)) # IP和端口 要绑定 服务端固定的IP端口
#
# res1 = server.recvfrom(1024)
# print('第一次:',res1)
# res2 = server.recvfrom(1024)
# print('第二次:',res2) from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket. server = socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8080)) # IP和端口 要绑定 服务端固定的IP端口 res1 = server.recvfrom(4)
print('第一次:',res1)
res2 = server.recvfrom(1024)
print('第二次:',res2)
客户端:
'''
udp 可以发空 数据报协议 说是发空,其实不是空 ,还有一个IP 端口的信息,发空时 带个端口信息
tcp:不是一一对应的
udp:是一一对应的 数据报 完整的额
'''
# from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket.
#
# client = socket(AF_INET,SOCK_DGRAM)
#
# client.sendto(b'hello',('127.0.0.1',8080))
# client.sendto(b'world',('127.0.0.1',8080))
# client.close() from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 会有大量的socket. client = socket(AF_INET,SOCK_DGRAM) client.sendto(b'hello',('127.0.0.1',8080))
client.sendto(b'world',('127.0.0.1',8080))
client.close()
TCP VS UDP
tcp基于链接通信
- 基于链接,则需要listen(backlog),指定连接池的大小
- 基于链接,必须先运行的服务端,然后客户端发起链接请求
- 对于mac系统:如果一端断开了链接,那另外一端的链接也跟着完蛋recv将不会阻塞,收到的是空(解决方法是:服务端在收消息后加上if判断,空消息就break掉通信循环)
- 对于windows/linux系统:如果一端断开了链接,那另外一端的链接也跟着完蛋recv将不会阻塞,收到的是空(解决方法是:服务端通信循环内加异常处理,捕捉到异常后就break掉通讯循环)
- 流式协议 会粘包 不可以发空 send recv 不是 一 一对应
- tcp适用于:
- 数据一定要可靠
- 远程执行命令
- 下载文件
udp无链接
- 无链接,因而无需listen(backlog),更加没有什么连接池之说了
- 无链接,udp的sendto不用管是否有一个正在运行的服务端,可以己端一个劲的发消息,只不过数据丢失
- recvfrom收的数据小于sendto发送的数据时,在mac和linux系统上数据直接丢失,在windows系统上发送的比接收的大直接报错
- 只有sendto发送数据没有recvfrom收数据,数据丢失
- 数据报协议 不会粘包 可以发空 sendto recvfrom 一 一 对应 数据报协议 数据不安全 有可能发送数据 > 1024 或者网络网络异常 数据没了
- udp适用于
- 查询操作 eg: ntp时间服务器 dns服务器(查域名,转ip) 能保证查询效率高,数据虽然不可靠
-------------------------------------------------------------
考核:
socket 通信 server client
定义一个学生类
元类? 使用元类定义一个对象
粘包
3次握手
封装 继承 多态
面向对象编程(UDP协议)的更多相关文章
- 网络编程 - UDP协议
UDP协议 服务端 ''' UDP 协议 又称 数据报协议 SOCK_DGRAM ''' from socket import * # 一般不这样做 会重名 但写socket可以这样写 因为要用到太多 ...
- 网络编程——UDP协议和通信
第1章 UDP与TCP协议 在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是 ...
- 网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例
UDP协议 (了解) 称之为数据包协议,又称不可靠协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需 ...
- Java网络编程(UDP协议:接收端)
package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...
- Java网络编程(UDP协议:发送端)
package WebProgramingDemo; import java.io.IOException; import java.net.DatagramPacket; import java.n ...
- 网络Socket编程UDP协议例子
服务端代码 public class UDPChatServer { //通讯端口 private Integer port=8000; //数据报文的通讯通道对象 private DatagramC ...
- Java网络编程(UDP协议-聊天程序)
接收端: package WebProgramingDemo; import java.net.DatagramPacket; import java.net.DatagramSocket; publ ...
- udp协议基础(转自疯狂java讲义)
第17章 网络编程 17.4 基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...
- 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现
一.客户端/服务器架构(C/S架构) 即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...
随机推荐
- HystrixRequestContext实现Request级别的上下文
一.简介 在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId.orgId等),那么如何实现呢? 方案一: 拦截器加上Threa ...
- dede 织梦的安装 出现dir
安装dede系统.(如果您已经安装,请跳过本步.)直接运行:http://您的域名/install如果没有出现该页面,而是出现了一个空白页面写着dir 那么请删除install文件夹中的 instal ...
- SpringCloud --服务调用Feign
介绍 服务间通信简介 一个系统可以由不同的微服务构成,比如一个电商系统可以由订单服务.商品服务.用户服务等共同组成. 这些服务相互独立,但又相互依赖.由于它们相互依赖,所以需要通过通信的方式来进行相互 ...
- 经典项目管理 OR 敏捷项目管理,我该怎么选?
CODING 项目协同近期为支持传统项目管理推出了「经典项目管理」.至此,CODING 已全面支持敏捷项目管理以及传统项目管理.那么问题来了,「经典项目管理」和「敏捷项目管理」,我该怎么选呢?本文将从 ...
- PostgreSQL WAL日志详解
wal日志即write ahead log预写式日志,简称wal日志.wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志. 当数据库中数据发生变更时:chang ...
- 【C++】《Effective C++》第七章
第七章 模板与泛型编程 条款41:了解隐式接口和编译期多态 面向对象设计中的类(class)考虑的是显式接口(explict interface)和运行时多态,而模板编程中的模板(template)考 ...
- QLibrary 加载动态库
阅读本文大概需要 6.6分钟 一般情况下在没有头文件支持情况下,想要引入某个动态库,最好的办法就是使用「动态加载」的方法,在Qt中一般使用QLibyary来操作 常用 api QLibrary(con ...
- 纯原生javascript下拉框表单美化实例教程
html的表单有很强大的功能,在web早期的时候,表单是页面向服务器发起通信的主要渠道.但有些表单元素的样式没办法通过添加css样式来达到满意的效果,而且不同的浏览器之间设置的样式还存在兼容问题,比如 ...
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- 浅入深出了解XXE漏洞
环境搭建 https://github.com/c0ny1/xxe-lab 为了更深入的理解,我准备理论和实际相结合的了解XXE! 浅谈XML 初识XML 一个好的代码基础能帮助你更好理解一类漏洞,所 ...