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 sys


from socket import *
from threading import Thread
 
 
def 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("结束通信!")
            break
 
def send_data():
    while True:
        msg = input(">")
        client_socket.send(msg.encode("utf-8"))
        if msg == "end":
            print("结束通信!")
            break
 
while 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循环的语句缩小了,原本的代码逻辑是一直循环建立套接字,改了以后的逻辑是,建立套接字我们只做一次就可以,剩下的处理发送和接受函数就可以,这样会看起来很简洁,而且从资源占用情况来说,按理是后面代码占用的资源会少一些。


对于物联网设计来说,一般需要将我们上传的数据放到数据库,或者网站显示,或者手机app调用。这里我们结合我之前写过的文章,采用将数据写入txt文件的形式,然后后面可以通过邮件定时发送出来,以附件的形式。

那我们就需要在接受函数上做文章,使用python的文件写入函数,先打开指定的文件,将数据流写入,对于格式而言,代码上使用分行显示,因此每接收到一串字符,后面加入换行,如下代码:

def recv_data():
    while True:
        recv_data = client_socket.recv(1024)  # 最大接收1024字节
        recv_content = recv_data.decode("utf-8")
        print(f"客户端说:{recv_content},来自:{client_info}")
        f = open("/root/data/hzy/hzylog.txt","a")
        value=(recv_content)
        s=str(value)
        f.write(s)
        f.write("\n")
        f.close()
        if recv_content == "end":
            print("结束通信!")
            break

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY_Share

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值