UDP网络编程

一、优缺点

二、套接字socket

三、类型转换

四、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() ---解码----

  1. 注意: 在解码时候使用编码方案和 编码时保持一致
  2. # 编码 解码 方法原型
  3. def encode(self, encoding='utf-8', errors='strict'):
  4. def decode(self, encoding='utf-8', errors='ignore'):
  5.  
  6. # 其中的encoding是指在解码编码过程中使用的编码格式,errors是指错误的处理方案。

strict:表示严格按照指定编解码方式进行编码和解码,如果编解码不成功则抛出异常

ignore:表示忽略编解码不成功的字符,如果编解码不成功程序不会抛出异常

四、UDP发收数据

1.发送数据

  1. import socket
  2.  
  3. # 1. 创建udp套接字
  4. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5.  
  6. # 2. 准备接收方的地址
  7. # '192.168.1.103'表示目的ip地址
  8. # 8080表示目的端口
  9. dest_addr = ('192.168.1.103', 8080) # 注意 是元组,ip是字符串,端口是数字
  10.  
  11. # 3. 从键盘获取数据
  12. send_data = input("请输入要发送的数据:")
  13.  
  14. # 4. 发送数据到指定的电脑上的指定程序中
  15. udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
  16.  
  17. # 5. 关闭套接字
  18. udp_socket.close()

2.接收数据

  1. import socket
  2.  
  3. # 1. 创建udp套接字
  4. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5.  
  6. # 2. 准备接收方的地址
  7. dest_addr = ('192.168.236.129', 8080)
  8.  
  9. # 3. 从键盘获取数据
  10. send_data = input("请输入要发送的数据:")
  11.  
  12. # 4. 发送数据到指定的电脑上
  13. udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
  14.  
  15. # 5. 等待接收对方发送的数据
  16. recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数
  17.  
  18. # 6. 显示对方发送的数据
  19. # 接收到的数据recv_data是一个元组
  20. # 第1个元素是对方发送的数据
  21. # 第2个元素是对方的ip和端口
  22. print(recv_data[0].decode('gbk'))
  23. print(recv_data[1])
  24.  
  25. # 7. 关闭套接字
  26. udp_socket.close()

五、广播和聊天器案例

1.UDP发送广播消息

  1. import socket # 套接字通信
  2.  
  3. # 创建udpsocket
  4. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  5. # 设置socket的选项,允许发送广播消息
  6. udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
  7. # 发送广播消息
  8. udp_socket.sendto("大家好,我叫小yang同学,多多关照!".encode(), ("192.168.33.255", 8080))
  9. # 关闭socket
  10. udp_socket.close()

2.UDP聊天器

  1. import socket
  2.  
  3. def send_message(udp_socket):
  4. """发送消息"""
  5. # 需要用户数输入数据 IP 端口
  6. data = input("数据:")
  7. IP = input("IP:")
  8. port = int(input("端口:"))
  9. udp_socket.sendto(data.encode(), (IP, port))
  10.  
  11. def recv_message(udp_socket):
  12. """接受消息"""
  13. res_data, addr = udp_socket.recvfrom(1024)
  14. print("用户%s传入的数据为:%s" % (str(addr), res_data.decode('gbk')))
  15.  
  16. def main():
  17. # 1.创建UDP套接字
  18. udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  19. udp_socket.bind(('', 9999))
  20.  
  21. # 2.开始循环接受用户输入,1:发送 2:接受 3:退出; 其他重新输入
  22. while True:
  23. op = input("1.发送数据\n2.接受数据\n3.退出\n请选择:")
  24. if op == '1':
  25. send_message(udp_socket)
  26. elif op == '2':
  27. recv_message(udp_socket)
  28. elif op == '3':
  29. print('buy')
  30. break
  31. else:
  32. print("输出有误,重新输入")
  33.  
  34. # 3.退出循环才关闭
  35. udp_socket.close()
  36.  
  37. if __name__ == '__main__':
  38. main()

网络传输--UDP的更多相关文章

  1. udp 视频包网络传输花屏

    视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...

  2. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  3. Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)

    Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务.通常情况下用于游戏,但也可以用于其它项目. Raknet有以下好处: 高性能 在同一台计算机 ...

  4. ASP.NET知识总结(1.网络传输层)

    1.网络传输层 1应用层(HTTP.FTP.SMTP)报文Message 2传输层(TCP.UDP)报文段Segment,为运行在不同主机上的应用程序进程间提供数据 传输服务.通过套接字(Socket ...

  5. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  6. App安全之网络传输安全

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  7. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  8. C#网络程序设计(3)网络传输编程之TCP编程

        网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...

  9. 网络传输编程之TCP

    网络传输编程之TCP   网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议 ...

随机推荐

  1. osg::Image::AllocationMode

    enum osg::Image::AllocationMode{ NO_DELETE, USE_NEW_DELETE, USE_MALLOC_FREE };

  2. Win10系统Ping端口及利用telnet命令Ping 端口

    启用 telnet 客户端组件为 Ping 端口做准备 在程序界面下,选择“打开或关闭Windows功能”,如下图所示: 在打开的对话框中,找到“Telnet客户端”并勾选.最后点击“确定”,等待几分 ...

  3. Mariadb 10.3.5 序列号(sequence) 尝鲜

    除了Oracle Mariadb 也有sequence了,前提是Mariadb 10.3以上版本才支持. 但目前的正式版依然是10.2 启动一个Mariadb 10.3.5 docker pull m ...

  4. ehcache缓存配置与参数说明

    <diskStore path="java.io.tmpdir" /> <defaultCache eternal="false" maxEl ...

  5. java转换图片压缩生成webp格式

    http://blog.csdn.net/xu_san_duo/article/details/79085718

  6. MYSQL 如何完全卸载数据库

    有时候MySQL不能完全卸载,这时候必须通过一些途径删除掉注册表和一些残余的文件,然后才能重新安装才可以成功! 1.控制面板——>所有控制面板项——>程序和功能,卸载mysql serve ...

  7. Flask web开发之路三

    今天写一个URL传参.反转URL.页面跳转和重定向 URL传参 主app文件代码: from flask import Flask app = Flask(__name__) @app.route(' ...

  8. Flask----基础

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  9. acm入门练习心得

    A题  两数相加等于n相乘等于m 问是否存在两数 写了超级久没有写出来,因为我的思路是 把m的因子都找出来,加加看,看等不等于n.后来发现m的因子还要考虑负数的情况,还要考虑m是不是负数的情况.太过麻 ...

  10. HDU 1166 - 敌兵布阵 - [分块]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 题解: 本题作为一个模板题,我用它来检验过总查询时间复杂度为 $O(q \log n)$ 的树状 ...