网络传输--UDP
UDP网络编程
一、优缺点
UDP : 无连接 (发送端无需确认接收端是否收到), 其主要用途为音视频和广播等
他是不可靠的网络传输协议, 容易丢数据包
优点:
1.无连接
2.资源开销小
3.传输速度快, 但容易丢包
4.udp每个数据包最大是64K
缺点:
1.传输数据不可靠,容易丢数据包
2.没有流量控制,当对方没有及时接收数据,发送方一直发送数据会导致缓冲区数据满了,电脑出现卡死情况,所有接收方需要及时接收数据。

二、套接字socket
socket(简称 套接字) 是进程间通信一个工具,它能实现把数据从一方传输到另外一方,完成不同电脑上进程之间的通信, 它好比数据的搬运工。
1. 安装网络调试助手
将安装包粘贴到桌面, 使用sudo dpkg -i xxx.deb 安装
如果安装过程中出现"锁"的错误, 使用sudo rm /var/lib/dpkg/lock
2.创建和关闭套接字
创建: udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
关闭: udp_socket.close()
3.绑定端口
注意: 需要在使用套接字收发数据之前 绑定端口
udp_socket.bind((本地IP, 端口))
如果需要绑定本机系统所有的IP 本地IP参数填' '
三、类型转换
在py3中 str 字符串类型 bytes字节/二进制类型
1. str——s.encode()-----编码-> bytes
2. -<——by.decode() ---解码----
注意: 在解码时候使用编码方案和 编码时保持一致
# 编码 解码 方法原型
def encode(self, encoding='utf-8', errors='strict'):
def decode(self, encoding='utf-8', errors='ignore'): # 其中的encoding是指在解码编码过程中使用的编码格式,errors是指错误的处理方案。
strict:表示严格按照指定编解码方式进行编码和解码,如果编解码不成功则抛出异常
ignore:表示忽略编解码不成功的字符,如果编解码不成功程序不会抛出异常
四、UDP发收数据
1.发送数据
import socket # 1. 创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2. 准备接收方的地址
# '192.168.1.103'表示目的ip地址
# 8080表示目的端口
dest_addr = ('192.168.1.103', 8080) # 注意 是元组,ip是字符串,端口是数字 # 3. 从键盘获取数据
send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上的指定程序中
udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 关闭套接字
udp_socket.close()
2.接收数据
import socket # 1. 创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2. 准备接收方的地址
dest_addr = ('192.168.236.129', 8080) # 3. 从键盘获取数据
send_data = input("请输入要发送的数据:") # 4. 发送数据到指定的电脑上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr) # 5. 等待接收对方发送的数据
recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数 # 6. 显示对方发送的数据
# 接收到的数据recv_data是一个元组
# 第1个元素是对方发送的数据
# 第2个元素是对方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1]) # 7. 关闭套接字
udp_socket.close()
五、广播和聊天器案例
1.UDP发送广播消息
import socket # 套接字通信 # 创建udpsocket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置socket的选项,允许发送广播消息
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
# 发送广播消息
udp_socket.sendto("大家好,我叫小yang同学,多多关照!".encode(), ("192.168.33.255", 8080))
# 关闭socket
udp_socket.close()
2.UDP聊天器
import socket def send_message(udp_socket):
"""发送消息"""
# 需要用户数输入数据 IP 端口
data = input("数据:")
IP = input("IP:")
port = int(input("端口:"))
udp_socket.sendto(data.encode(), (IP, port)) def recv_message(udp_socket):
"""接受消息"""
res_data, addr = udp_socket.recvfrom(1024)
print("用户%s传入的数据为:%s" % (str(addr), res_data.decode('gbk'))) def main():
# 1.创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('', 9999)) # 2.开始循环接受用户输入,1:发送 2:接受 3:退出; 其他重新输入
while True:
op = input("1.发送数据\n2.接受数据\n3.退出\n请选择:")
if op == '1':
send_message(udp_socket)
elif op == '2':
recv_message(udp_socket)
elif op == '3':
print('buy')
break
else:
print("输出有误,重新输入") # 3.退出循环才关闭
udp_socket.close() if __name__ == '__main__':
main()
网络传输--UDP的更多相关文章
- udp 视频包网络传输花屏
视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...
- [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解 http://www.52im.net/thread-1309-1-1.html 本文来自腾讯资深研发工程师罗成的技术分享, ...
- Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)
Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务.通常情况下用于游戏,但也可以用于其它项目. Raknet有以下好处: 高性能 在同一台计算机 ...
- ASP.NET知识总结(1.网络传输层)
1.网络传输层 1应用层(HTTP.FTP.SMTP)报文Message 2传输层(TCP.UDP)报文段Segment,为运行在不同主机上的应用程序进程间提供数据 传输服务.通过套接字(Socket ...
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...
- App安全之网络传输安全
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- 解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 网络传输编程之TCP
网络传输编程之TCP 网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议 ...
随机推荐
- SQL Server -- stuff 函数
STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...
- 132、Android安全机制(2) Android Permission权限控制机制(转载)
http://blog.csdn.net/vshuang/article/details/44001661 http://www.cnblogs.com/mengdd/p/4892856.html
- 十二、K3 WISE 开发插件《工业单据老单与自己添加的窗体 - 互相传值传参》
===================================== 目录: 1.演示效果--[销售订单]传值给[自定义窗体] 2.演示效果--[自定义窗体]传值给[销售订单] 3.附源码 4. ...
- js for in 获得遍历数组索引和对象属性
for in 遍历对象属性 获取的是对象的属性名 var person ={ name:"admin", age:"21", address:"sha ...
- 安卓手机优化 ROOT自启动管理 + 电量管理
一.KingRoot + 净化大师 KingRoot 主要完成ROOT 和 自启动软件的管理 这里禁止的自启动管理 对于有些软件是不太管用 比如美团 手机百度等 净化大师 主要完成 高电量的软件优化 ...
- 利用selenroid扩展uiautoamtor的webview解析能力
uiautomator是一个非侵入式框架,但是webview解析能力很弱.为了改进webview的支持,可以考虑把webdriver或者selenroid整合进来. 具体接入可参考:http://se ...
- day7 七、字符编码,字符字节与文件操作
一.字符编码 1.定义:人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系) 对应关系形成的结构 ...
- [No0000101]JavaScript-基础课程1
JavaScript 是一种轻量级的编程语言,很容易学习,同时也是一种被广泛用于客户端Web开发的脚本语言.通过本课程学习,我们可以了解到JavaScript的基本语法知识,以及怎样使用它去创建简单的 ...
- deepin中idea中文乱码解决
打开终端 命令: sudo su 输入密码: aptitude search uming 显示: root@terwer-PC:/home/terwer# aptitude search uming ...
- C和C指针小记(十一)-递归和迭代优化
1.递归 C通过运行时堆栈支持递归函数的实现. 递归函数就是直接或间接调用自身的函数. 一个小例子: /** 使用递归将整型转换为ascii字符 @param value 整型数 */ void bi ...