python网络编程之UDP方式传输数据
UDP --- 用户数据报协议(User Datagram Protocol),是一个无连接的简单的面向数据报的运输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
开发环境:linux下pycharm3.5
测试:使用terminal终端测试
使用 nc -u ip 端口 进行测试客户端
使用 nc -lu ip 端口 进行测试服务器端
1.udp服务器端接受一次数据
import socket # 设置服务器默认端口号
PORT = 9002
# 创建一个套接字socket对象,用于进行通讯
# socket.AF_INET 指明使用INET地址集,进行网间通讯
# socket.SOCK_DGRAM 指明使用数据协议,即使用传输层的udp协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ("", PORT)
# 为服务器绑定一个固定的地址,ip和端口
server_socket.bind(address)
# 接收客户端传来的数据 recvfrom接收客户端的数据,默认是阻塞的,直到有客户端传来数据
# recvfrom 参数的意义,表示最大能接收多少数据,单位是字节
# recvfrom返回值说明
# receive_data表示接受到的传来的数据,是bytes类型, receive_data.decode()解码,将bytes类型转换为字符串类型
# client_address 表示传来数据的客户端的身份信息,客户端的ip和端口,元组
receive_data, client = server_socket.recvfrom(1024) print("来自客户端%s,发送的%s" % (client, receive_data.decode()))
# 不再接收数据的时候,将套接字socket关闭
server_socket.close()
测试:
2.udp服务端循环多次接受数据
import socket PORT = 9002
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ("192.168.219.129", PORT)
server_socket.bind(address)
while True:
receive_data, client_address = server_socket.recvfrom(1024)
print("接收到了客户端 %s 传来的数据: %s" % (client_address, receive_data.decode()))
3.udp客户端接受一次数据
import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
msg = input("请输入要发送的内容:") # 字符串类型, 通过msg.encode() 编码 转换为bytes类型
server_address = ("127.0.0.1", 8000) # 接收方 服务器的ip地址和端口号
client_socket.sendto(msg.encode(), server_address)
client_socket.close()
4.udp客户端循环多次接受数据
import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = input("请输入要发送的内容:")
server_address = ("192.168.79.127", 8000)
client_socket.sendto(msg.encode(), server_address)
5.udp服务器端循环多次接受发送数据
import socket PORT = 8000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ("", PORT)
server_socket.bind(address)
while True:
receive_data, client_address = server_socket.recvfrom(1024)
print("接收到了客户端 %s 传来的数据: %s" % (client_address, receive_data.decode()))
server_socket.sendto(receive_data, client_address)
6.udp客户端循环多次接受发送数据
import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
msg = input("请输入要发送的内容:")
server_address = ("", 8000)
client_socket.sendto(msg.encode(), server_address) receive_data, sender_address = client_socket.recvfrom(1024)
print("接受到了发送方 %s 传来的数据: %s" % (sender_address, receive_data.decode()))
python网络编程之UDP方式传输数据的更多相关文章
- python网络编程:UDP方式传输数据
UDP --- 用户数据报协议(User Datagram Protocol),是一个无连接的简单的面向数据报的运输层协议. UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能 ...
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- Java网络编程之UDP
Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...
- Python网络编程之TCP套接字简单用法示例
Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...
- python网络编程之socket
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Python网络编程之socket应用
1 引言 本篇主要对Python下网络编程中用到的socket模块进行初步总结.首先从网络基础理论出发,介绍了TCP协议和UDP协议:然后总结了socket中的常用函数:最后通过实际代码展示基本函数的 ...
- python六十八课——网络编程之UDP协议
1.1 概述 UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接.简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到 ...
- day33 网络编程之UDP与进程了解
UDP 什么是UDP协议 在上节课的练习中,使用TCP进行网络编程时,我们会遇到粘包问题,这是因为TCP是流式协议,而今天学习的UDP协议不是流式协议,其发送的数据是数据报格式的,在进行数据发送时该协 ...
- Python网络编程之Socket的简单实现
一.引入 关于Python的网络编程,最基础莫过于socket了. socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket. py ...
随机推荐
- Automatic overvoltage protection
In most cases the voltage that is induced in the coil can not exceed 6V, and it does not have risk t ...
- perl debug
1. 进入debug模式 # perl -d ./perl_debugger.pl it prompts, DB<1> 2. 查看从第10行开始的代码. 查看函数get_pattern ...
- svn与git操作对比 (未来有空做一个 svn与git实战对比 )
svn是集中式的,git是分布式的,但是我们日常使用的都是按照集中式唯一服务器仓库的方式来去做的,最终我们的代码都要提交到一个唯一仓库中. 他们最大的区别是本地工作拷贝的工作方式不同, 一.svn本地 ...
- iOS开发-NSUndoManager撤销(undo)和重做(redo)
程序开发中我们经常会用到的两个快捷键Ctrl+Z和Ctrl+C,撤销和复制,Cocoa开发也可以实现这两个操作,为我们提供非常简单的操作类NSUndoManger,也可以称之为撤销管理器,NSUndo ...
- 解决netaddr不能安装0.7.6以上版本
今天在Jenkins上添加了两个新jobs,但是同事提交代码后的自动测试运行出现错误.查看原因是tox命令在安装包依赖的时候,找不到大于0.7.6以上的版本,但可是我们明明安装过0.7.10了呀. 后 ...
- rman输出日志的几种方法(转)
在使用rman的时候经常会碰到以下两种场景,需要把rman的日志输出到文件中: 1.显示的日志太多,导致一个屏幕显示不完,影响了问题的诊断,这时候需要把rman的log输出到文本中,整个的诊断过程就相 ...
- python3用BeautifulSoup抓取图片地址
# -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #抓取图片地址 from bs4 i ...
- CentOS---网络配置详解 (转)
一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里,跟网络有关的主要设置文件如下: /etc/host.conf 配置域名服务客户端的控制文件/etc/hos ...
- mac 安装memcached以及启动memcached
参考链接:https://blog.csdn.net/whereismatrix/article/details/50485570
- 拯救安卓手机的数据(无法进入系统只能打开recovery)
这里不得不赞一个谷歌的开放,如果不是这样读取数据就很糟糕了,记得一千带着我的mac本子到苹果店,那个所谓的“天才”就说苹果的数据无法读取,我了个艹,为了避免丢失你必须得准备一个TM.好了废话不多说,进 ...