python socket sendto sendall_网络通信 Python Socket UDP Select
前言
工作中遇到各种各样的网络通信。有MQTT和CoAP这样的物联网应用层协议,也有各种自定义的TCP或UDP协议。使用各种不同的计算机语言和框架开发网络通信,例如Java的Netty框架,C语言原始socket,Python Socket。各有各的使用场景,难易程度相差巨大。Netty上手困难,C语言编写复杂,Python Socket上手容易。
长久以来,UDP通信一直被误解为一种不可靠的通信手段,但是UDP简单使用,特别适合物联网终端。UDP没有三次握手和四次挥手,换个角度来说节约了网络流量,降低了设备的功耗。UDP协议也是物联网应用层协议CoAP、LwM2M的传输层协议,也有消息说HTTP 3.0协议将使用UDP作为传输层协议
示例简述
本例通过select实现一个UDP Server,一般来说select相比其他recv和send等常用函数难用不少,网上也很难找到合适的示例,特别是UDP Select示例。
开发环境 Windows PyCharm社区版 Python3.7
服务器示例
udp-server-select.py
import select
import socket
import binascii
HOST = ''
PORT = 50018
server_fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_fd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_fd.bind((HOST, PORT))
print('starting up on %s port %s' % (HOST, PORT))
# 把服务器套接字加入到输入列表中
inputs = [server_fd]
client_address = None
conn = None
while True:
# readable, writable, exceptional = select.select(inputs, [], [], 1.0)
readable = select.select(inputs, [], [], 1.0)[0]
for s in readable:
data, client_address = s.recvfrom(1024)
if data:
# 收到客户端数据
print('received "%s" from %s' % (binascii.hexlify(data), client_address))
s.sendto(data, client_address)
代码说明
inputs = [server_fd] 创建套接字后把服务器套接字加入到输入列表中
select函数有4个输入参数,分别为输入列表、输出列表、错误列表和超时时间,输出参数为一个Python元组类型,分别为可读列表、可写列表和错误列表。select函数原型如下:
select(rlist, wlist, xlist[, timeout]) -> (rlist, wlist, xlist)
如果仅需要查询可读列表,可以简写为select.select(inputs, [], [], 1.0)[0],也就是选择select返回元组类型的第0个元素。
客户端示例
运行与测试
先启动UDP服务器,再启动UDP客户端。
服务器控制台可能输出
connected by ('127.0.0.1', 50019) received b'31323334'
connected by ('192.168.3.18', 50019) received b'31323334'
客户端控制台可能输出
received b'31323334' from ('127.0.0.1', 50018)
相关资料
物联网图书推荐 CoAP基础 徐凯《IoT开发实战: CoAP卷》 2017 机械工业出版社【 京东链接】
物联网图书推荐 CoAPs进阶 徐凯 崔红鹏《密码技术与物联网安全:mbedtls开发实战》2019 机械工业出版社 【京东链接】
python socket sendto sendall_网络通信 Python Socket UDP Select相关推荐
- Python C/S架构,网络通信相关名词,socket编程
主要内容: 一. C/S架构 二. 网络通信的相关名词 三. socket编程 一. C/S架构和B\S架构概述 1. C/S架构: Client/Server(客户端/服务端)架构 描述: C/S ...
- python实现udp聊天室_python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序...
socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工. socket应用: 不夸张来说,只要跟网络 ...
- Python之路 - 网络编程之Socket
Python之路 - 网络编程之Socket C/S架构 ? Socket ? 基于TCP ? 基于UDP ? Socket对象方法 ? C/S架构 ? 在网络通信中 , 一般是一方求一方应 , 求的 ...
- Python网络与并发编程 01 Socket编程
前瞻知识 C/S架构 C/S架构是一种由服务端(Server)和客户端(Client)组成的双层架构. 互联网中处处充满了C/S架构(Client/Server),比如我们需要玩英雄联盟,就必须连接至 ...
- python socket编程_Python学习记录-socket编程
1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...
- python远程调用摄像头_Python设置Socket代理及实现远程摄像头控制的例子
为python设置socket代理首先,你得下载SocksiPy这个.解压出来之后里面会有一个socks.py文件.然后你可以把这个文件复制到python安装目录里面的Lib\site-package ...
- Python进阶【第一篇】socket
1.socket()模块函数 要使用socket.socket()函数来创建套接字.其语法如下: socket.socket(socket_family,socket_type,protocol=0) ...
- python套接字socket的作用_【学习笔记】python实现的套接字socket
#############2014.5.13 update############## #更新了多进程服务端的bug:客户端强行关闭会出错# ############################# ...
- python文件传输socket_树莓派采用socket方式文件传输(python)
两个树莓派,在同一个局域网内,传输文件,采用socket方式. client端代码: import socket import os import hashlib client = socket.so ...
最新文章
- 图片上两点之间的距离和两组图片之间的差异的关系
- 实现Qt日志功能并输出到文件
- boost::gil::for_each_pixel用法的测试程序
- vue wabpack 切换开发环境 和生成环境 的接口地址
- 未来数据中心的五大“走心”创新
- Redis单机和集群环境搭建
- java12/6作业1
- 空闲队列函数排队 requestIdleCallback
- 手机网络游戏系统架构图
- 微信公众号实现消息模板的推送
- poi-3.17版本 和若依框架结合--excel导出,excel图片导出
- 【XJTUSE计算机图形学】第四章 真实感图形学(1)——–颜色视觉
- 列举五样计算机常见故障,项目五计算机常见故障和排除.ppt
- 常见bat命令(二)
- mysql数据库系统时区_mysql 杂记 —— 时区问题
- 用python的sympy解符号方程组
- SSH登录异常(someone is doing something nasty)
- Nature:交互式语言的语音规划网络
- 湖南财务大数据比赛代码2018-12-20
- 亚稳态与信号跨时钟域介绍
热门文章
- 系统上线后关键用户的工作建议
- Oracle的一点注意点
- 批量下载ABAP程序和表结构
- 抓取标准报表ALV GRID上的数据
- 波司登在“寒潮”下再创新高,羽绒服行业真的靠天吃饭?
- linux apt qt下载,Linux如何安装 apt-get 软件管理工具
- mysql 倒序 分页_nodeJS与MySQL实现分页数据以及倒序数据
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
- 全面讲解Python字典;--什么是字典?字典的常用方法;创建空字典并赋值,增删改查字典中的元素
- Python中必须知道的知识点:上下文管理器