当前位置: 首页 > article >正文

Python脚本,物联网云服务器端口监控

        事实上,物联网的思路很简单,客户端设备通过TCP协议上传到某个云服务器的端口,我们需要在这个云服务器上编写一个小小的脚本去创建某个端口,持续监听,可以互相发送数据,这个脚本语言可以是JAVA,也可以是Python,或者其他语言。我之前的博客就使用了JAVA脚本的方式,这篇文章谈谈Python。

        学习一门语言,就是在该语言的环境下,我们通过撰写该语言的逻辑系统,实现某种我们想要的功能。因此,如果我们要写python脚本,首先要做的就是搭建python环境,不同系统搭建的方法不同,因为我用的是云服务器搭建物联网系统,因此我的系统的Linux:

 

        搭建好环境以后,使用vim 直接建立一个 .py的文件,在文件上编辑上我们想要的代码,就可以直接运行:

python xx.py

        不需要像java那样先来个javac编译一下。当然,编译有编译的好处,可以提前发现问题,提前解决问题。

TCP双向持续监听代码:

#!/usr/bin/python3
# 文件名:server.py# 导入 socket、sys 模块
import socket
import sysfrom socket import *
from threading import Threaddef recv_data():while True:recv_data = client_socket.recv(1024)  # 最大接收1024字节recv_content = recv_data.decode("utf-8")print(f"客户端说:{recv_content},来自:{client_info}")if recv_content == "end":print("结束通信!")breakdef send_data():while True:msg = input(">")client_socket.send(msg.encode("utf-8"))if msg == "end":print("结束通信!")breakwhile True:server_socket = socket(AF_INET, SOCK_STREAM)  # 建立TCP套接字host = gethostname()server_socket.bind((host, 8888))  # 本机监听8888端口server_socket.listen(5)print("等待接收连接!")client_socket, client_info = server_socket.accept()print("客户端建立连接成功!")t1 = Thread(target=recv_data)t2 = Thread(target=send_data)t1.start()t2.start()t1.join()t2.join()client_socket.close()

代码的逻辑是:

一、调用底层指令,编写发送和接收数据的函数

二、建立套接字,监听端口

三、循环运行端口监听、发送和接收函数。

        运行以上的代码,然后我们本地电脑安装一个TCP调试助手,连接到该服务器和端口,就是互相发送数据。

 

        不过如果你足够细心,应该会发现上面的代码还不够好,先看看修改后的:

server_socket = socket(AF_INET, SOCK_STREAM)  # 建立TCP套接字
host = gethostname()
server_socket.bind((host, 8888))  # 本机监听8899端口
server_socket.listen(5)
print("等待接收连接!")
client_socket, client_info = server_socket.accept()
print("客户端建立连接成功!")while True:t1 = Thread(target=recv_data)t2 = Thread(target=send_data)t1.start()t2.start()t1.join()t2.join()client_socket.close()

        这块代码不同之处是将while循环的语句缩小了,原本的代码逻辑是一直循环建立套接字,改了以后的逻辑是,建立套接字我们只做一次就可以,剩下的处理发送和接受函数就可以,这样会看起来很简洁,而且从资源占用情况来说,按理是后面代码占用的资源会少一些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/58363.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章:

Python脚本,物联网云服务器端口监控

事实上,物联网的思路很简单,客户端设备通过TCP协议上传到某个云服务器的端口,我们需要在这个云服务器上编写一个小小的脚本去创建某个端口,持续监听,可以互相发送数据,这个脚本语言可以是JAVA,也…...

Python之wxPython框架的使用

Python之wxPython框架的使用一、安装wxPython二、创建一个 wx.App 的子类三、直接使用wx.App四、使用wx.Frame 框架五、常用控件1.Static Text 文本类2.TextCtrl 输入文本类3.Button 按钮类一、安装wxPython wxPython是个成熟而且特性丰富的跨平台GUI工具包。由Robin Dunn 和Ha…...

量子密钥分发B92协议——笔记

一、B92介绍 (参照邓富国的博士论文) 1、什么是量子密钥分配(QKD) 通信双方以量子态为信息载体,利用量子力学原理,通过量子信道传送,在彼此之间建立共享密钥的方法。 2、B92协议简介&#x…...

TiFlash 数据校验

本文档介绍 TiFlash 的数据校验机制以及相关的工具。 使用场景 数据损坏通常意味着严重的硬件故障。在这种情形下,即使尝试自主修复,也会使得数据的可靠性下降。TiFlash 默认对数据文件进行基础的校验,使用固定的 City128 算法。一旦发现数…...

JavaWeb实战002-servlet原理

request 和 response 过程 request browser 使用 request 请求 tomcat,tomcat 根据 servlet 请求 webapp response webapp 返回给 tomcat,tomcat 再 response 给 browser 简单模拟 servlet 以下所有文件都在同一个目录下,目录结构&#xff…...

基于深度学习的命名实体识别研究综述——论文研读

基于深度学习的命名实体识别研究综述摘要:0引言1基于深度学习的命名实体识别方法1.1基于卷积神经网络的命名实体识别方法1.2基于循环神经网络的命名实体识别方法1.3基于Transformer的命名实体识别方法1.4其他的命名实体识别方法1.5基于深度学习的命名实体识别方法对…...

2022下半年数学建模竞赛汇总(比赛时间、出成绩时间)

1、2022年天府杯全国大学生数学建模国际赛 竞赛开始时间:2022年10月20日18:00 预计出成绩时间:2022年11月5日 是否可跨校:是 2、2022年中国高校大数据挑战赛 竞赛开始时间:2022年10月27日8:00 预计出…...

为什么python证券接口通达信系统中没有接口?

Python证券接口通达信是一种动态类型语言,拥有ducking type的特征,因此是天生支持接口。python有个自动保存到etcd的库,可以网上搜下看下这个库的使用以及它开发的api接口,不过之前go使用etcd的时候,是调用etcd本身的r…...

基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码+系统+数据库+lw文档+部署

基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署 基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:id…...

金橙子通过注册:年营收2亿净利5263万 拟募资4亿

雷递网 雷建平 10月4日北京金橙子科技股份有限公司(简称:“金橙子”)日前通过注册,准备在科创板上市。金橙子计划募资3.96亿元,其中,1.64亿元用于激光柔性精密智造控制平台研发及产业化建设项目&#xff0c…...

cdr怎么保存低版本 cdr保存低版本闪退

cdr是一款拥有着强大用户群体的矢量图编辑软件,它从面世至今经历了多个版本的迭代,不同版本各具特色,有时候我们需要将cdr保存为低版本,但在操作时可能会遇到一些问题,比如闪退等等,下面我们一起来了解一下…...

数据库,容器化如虎添翼

最近看到一篇推文,痛述MySQL不能上容器的各种理由,基本是N年前的陈词滥调,东拼西凑出的一篇水帖,文末对于数据库是否能上容器,也是模糊不清,没有确切的观点,标题倒是吸引眼球,不明就…...

【CE】Mac下的CE教程Tutorial:基础篇(第5关:代码查找器)

▒ 目录 ▒🛫 导读开发环境1️⃣ 第五关:代码查找器翻译操作步骤🛬 文章小结📖 参考资料🛫 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第五关:代码查…...

MySQL数据库——数据库是什么?关系型数据库和非关系型数据库又是什么?

在学习数据库之前,应该先理解什么是数据。下面介绍一下数据以及数据库的概念,再对关系型数据库和非关系型数据库的优缺点进行分析。 描述事物的符号称为数据。数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语…...

Spring Cloud Stream 学习笔记

Spring Cloud Stream 官方文档: https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/ 中文手册: https://m.wang1314.com/doc/webapp/topic/20971999.html 是什么? Spring Cloud Stream is a framework for buildi…...

langchain学习4

langchain学习4 原文地址: Chatbot Memory with Langchain | Pinecone An introduction to different conversational memory types for building chatbots and other intelligent …… Conversational memory 是聊天机器人能够以a chat-like manner 回应多个queries的方式。它…...

解决windows10资源管理器无限刷新、高占用的解决方法

首先是我使用Edge添加pdf笔记的时候,Edge浏览器自动崩溃,我就重新打开。于是就开始了疯狂的无限刷新,并且cpu高占用。如果不是因为这个原因导致的无限刷新,那么这个方法或许不适合。 这是一个关于浏览器读取pdf的一个bug 具体解…...

解决CSGO出现加载某些地图时,进入载入界面闪退游戏的问题

关于这个问题,我经过steam技术客服的回复后,关键问题在于: 我的内存不够用,导致游戏在加载地图资源的时候,内存溢出,导致游戏崩溃。你可以用WINX在事件查看器 -windows日志-应用程序 中看到csgo崩溃的时候留…...

【微信小程序云开发】解决云开发数据库调用产生的异步Promise数据问题和调用数据库存在20条上限的问题)

【微信小程序云开发】解决云开发数据库调用产生的异步Promise数据问题和调用数据库存在20条上限的问题项目场景:代码描述:结语:项目场景: 项目场景: 最近在开发一款查询类的微信小程序,由于使用的是小程序…...

[nextcloud]解决使用外部存储添加本地外置硬盘出现无法读写的问题

问题经过 由于我的nextcloud存储空间完全不够日常使用,于是我就用就固态硬盘安装到服务器上。并且我使用的nextcloud是通过snap安装部署的,所以使用命令设置会比较方便。但是我发现通过nextcloud设置页面添加的本地存储无法写入,在新添加的文…...