Linux开发板(树莓派)和服务器进行双向通信(socket)
前言
物联网是目前嵌入开发必备的属性之一,我们常常需要把自己开发板和云端进行交互,本篇博文就记录一下。
使用Socket来实现Linux开发板和服务器进行双向通信,Python中是默认集成了socket模块的,我们就不需要下载了。
实际上,只要是能运行Python的环境,就可以和服务器进行双向通信,你不必局限于树莓派。
一、开发环境
PC系统:windows 10
Linux开发板:树莓派4B
服务器:阿里云 ECS
编程语言:Python
二、通信代码
我认为我的注释是十分详细的,实现简单用函数来调用(贴代码方便),自己开发时,可以用类封装一下。
记得先在服务器把要用的端口添加到安全组里面。下面的代码服务器端你不需要做任何修改,开发板端你把公网ip修改成自己的就可以跑通了。
(1)服务器端
import socket
import sys
def socket_service_data():
# 连接
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(ADDR) # 在不同主机或者同一主机的不同系统下使用实际ip
s.listen(10)
except socket.error as msg:
print(msg)
sys.exit(1)
print("Wait for Connection..................")
sock, addr = s.accept()
while True:
# 收
buf = sock.recv(BUFSIZ) # 接收数据
buf1 = buf.decode('utf-8') # 解码
if not buf:
break
print('Received message:', buf1)
# return buf
# 发
buf = input("input data:") # 输入要传输的数据
if not buf:
break
sock.send(buf.encode()) # 将要传输的数据编码发送,如果是字符数据就必须要编码发送
# 关闭socket
sock.close()
if __name__ == '__main__':
# 初始化
name = socket.gethostname()
HOST = socket.gethostbyname(name) # 获取阿里云服务器私网IP,使用ifconfig可查询
PORT = 7000
BUFSIZ = 1024
ADDR = (HOST, PORT)
socket_service_data()
(2)开发板端
import socket
import sys
def sock_client_data():
# 连接
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR)
except socket.error as msg:
print(msg)
print(sys.exit(1))
while True:
# 发
data = input("input data:") # 输入要传输的数据
if not data:
break
s.send(data.encode('utf-8')) # 将要传输的数据编码发送,如果是字符数据就必须要编码发送
# 收
data = s.recv(BUFSIZ)
if not data:
break
print(data.decode('utf-8'))
# 关闭socket
s.close()
if __name__ == '__main__':
# 初始化
HOST = '99.100.101.102' # 比如 99.100.101.102是你的服务器的公网IP
PORT = 7000 # IP开放的socket端口
BUFSIZ = 1024
ADDR = (HOST, PORT)
sock_client_data()
开发板发一句,服务器接受一句,服务器发一句,开发板再接受一句。


三、通信代码解释
代码逻辑没什么说的,简单说下socket模块中调用的一下方法。
1.sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
释:socket.AF_INET IPv4(默认),socket.SOCK_STREAM 流式socket , for TCP (默认),缺省是0 我上面都没填系统就会根据地址格式和套接类别,自动选择一个合适的协议。
2.sk.bind(address)
释:s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。
在AF_INET下,以元组(host,port)的形式表示地址。
3.sk.listen(backlog)
释:开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5。这个值不能无限大,因为要在内核中维护连接队列。
4.sk.accept()
释:接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。接收TCP 客户的连接(阻塞式)等待连接的到来。
5.sk.connect(address)
释:连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
6.sk.recv(bufsize[,flag])
释:接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。
7.sk.send(string[,flag])
释:将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。
8.sk.close()
释:关闭套接字
9.socket.gethostname()
释:gethostname()返回运行程序所在的计算机的主机名
后言
写博客总结费时间,如果这篇博文对你有所帮助,记得给我点个赞哦
参考文章链接
Linux开发板(树莓派)和服务器进行双向通信(socket)的更多相关文章
- 嵌入式Linux开发板
嵌入式Linux开发板开发介绍: iTOP-4412嵌入式Linux开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,独家配备三星S5M8767电源管理,配备Andro ...
- 意法半导体STM32MP157A MPU加持,米尔科技首款ST Linux开发板MYD-YA157C评测
ST公司去年推出了MPU系列芯片,MPU系列不同于以往产品,它既包含有ARM公司Cortex M 单片机核心,也包含有ARM公司Cortex A 应用处理器核心,以期将STM32单片机产品优势扩展到更 ...
- 小白自制Linux开发板 二. u-boot移植
上一篇:小白自制Linux开发板 一. 瞎抄原理图与乱画PCB 中我们做了一个小型而没用的开发板,用的是Licheepi Nano的镜像,那从本篇开始我们开始自己构建它的灵魂吧. 我们都知道,PC在 ...
- 小白自制Linux开发板 一. 瞎抄原理图与乱画PCB
因为墨云是基于高中物理水平的电路知识来学习.而且此前也就玩过树莓派.Esp8266之类的开发板,水平基础趋近于零,所以在写这个系列的时候抱着记录的心态.还望不足之处还望大佬们指正. <论语> ...
- 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板
开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...
- 成功移植SQLite3到ARM Linux开发板
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 ...
- 3.使用secureCRT连接PC,LINUX,开发板
1.设置secureCRT(可选项):http://www.linuxyw.com/linux/gongxiang/20130505/161.html 2.使用secureCRT远程登录linux 3 ...
- 【安富莱专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控
说明:1. 开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接.2. 需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接.3. 教程中使用的是花生壳免费版, ...
- 小白自制Linux开发板 三. Linux内核与文件系统移植
上一篇完成了uboot的移植,但是想要愉快的在开发板上玩耍还需要移植Linux内核和文件系统. 1.Linux内核 事实上对于F1C100S/F1C200S,Linux官方源码已经对licheepi ...
随机推荐
- Python:pathlib模块
Blog:博客园 个人 关于panthlib模块 pathlib模块提供表示文件系统路径的类,其语义适用于不同的操作系统.路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 ...
- R数据分析:数据清洗的思路和核心函数介绍
好多同学把统计和数据清洗搞混,直接把原始数据发给我,做个统计吧,这个时候其实很大的工作量是在数据清洗和处理上,如果数据很杂乱,清洗起来是很费工夫的,反而清洗好的数据做统计分析常常就是一行代码的事情. ...
- Kubeadm部署-Kubernetes-1.18.6集群
环境配置 IP hostname 操作系统 10.11.66.44 k8s-master centos7.6 10.11.66.27 k8s-node1 centos7.7 10.11.66.28 k ...
- Understanding JSON Schema
json schema 在线校验器 译自:Understanding JSON Schema { "type": "object", "propert ...
- 【转】浅谈 Integer 类
突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- [题解]Mail.Ru Cup 2018 Round 1 - D. Changing Array
[题目] D. Changing Array [描述] 给n个整数a[1],...,a[n],满足0<=a[i]<=2^k-1.Vanya可以对这n个数中任一多个数进行操作,即将x变为x' ...
- 大数据BI系统搭建对企业经营的作用有哪些
随着数据化时代的到来,企业为了适应高速发展的业务.维持自身更好的发展,纷纷开始寻求适合自身企业发展的BI系统.为什么BI系统会受到企业如此的青睐?BI系统对企业经营究竟有哪些方面的作用呢? 下面,小编 ...
- 如何用excel搭建数据模型,销售数据管理软件
过完了国庆和中秋的双节后,就进入了2020年的倒计时了,相信许多小伙伴还没反应过来,怎么感觉时间过的这么快,唰的一下一年就过去了四分之三.对于销售人员来说,更是无比的压力山大,对于他们来说,Q4季度 ...
- petite-vue源码剖析-为什么要读源码?
什么是petite-vue? 根据官方解释,petite-vue是专门为非前后端分离的历史项目提供和Vue相近的响应式开发模式. 与完整的Vue相比最大的特点是,面对数据的变化petite-vue采取 ...
- 华为服务器设置iBMC管理网口IP地址,开启Monitor图文教程
设置iBMC管理网口IP地址 默认用户名:root 默认密码:Huawei12#$ 操作步骤 服务器重启时,当出现如下界面时,重复按"Delete". 在启动过程出现输入密码对话框 ...