【学习笔记】如何使用python的socket包实现本地与云服务器通信

1.概叙:

由于最近的一个项目需求,需要实现将IOT板端的推理结果通过wifi上报给云服务器。所以在这里写下这篇文章作为我自己的学习笔记。

下面的文章我将分别从云服务器端本地端进行环境配置的总结。

2.正文

2.1云服务器端:

在本文中,我所使用的是阿里云服务器。

因为最近阿里云在做一个叫开发者成长计划的活动,如果你是学生的话,可以完成学生认证后免费体验阿里云服务器。

链接如下:阿里云开发者成长计划

在拿到阿里云服务器的资源后,可以先参考网上配置云服务器python环境的教程,这是我所参考的教程。

链接如下:云服务器搭建python环境

搭建好云服务器的python环境后,接下来就需要在云服务器端跑python脚本了。

这里我使用的IDE是pycharm,因为pycharm支持远程连接服务器来编写代码,并能实现本地代码文件与云服务器代码文件的同步跟新以及调用云服务器的python解释器。

具体的操作过程为:

1、打开pycharm,新建工程,在D盘下新建test文件夹,用于存放本地工程文件。

2、在工程目录下新建一个python文件夹main.py。

3、打开文件->setting->项目解释器,增加python的解释器。

4、选择ssh解释器,主机部分填云服务的公网ip地址,用户名填注册时的用户名,点击下一步。

5、输入用户密码,点击下一步。

6、解释器为云服务器上的python解释器路径

7、编辑同步文件夹,现在云服务器新建test文件夹,将Remoto Path路径改为云服务器上的test文件夹路径,点击确认,然后finish。

8、点击应用后,确定。

9、点击工具栏->部署->选项

10、修改上传同步快捷键为,ctrl+s,设置完成后便可以通过ctrl+s来同步更新服务器上的test目录下的代码文件。

11、单机右键运行代码,可以看到左下角使用的解释器为云服务器上的解释器。

到这里python远程编写代码的环境就配置完成了。

接下来在工程目录下,新建tcpServer.py文件,把下面的测试代码拷贝到该文件,下面的测试代码主要是向连接的客户端发送时间戳。

注意:需要将绑定的ip改为云服务器的私有ip,端口号随机,这里我选择的是9000

#-*- codeing = utf-8 -*- #@Time: 2021/8/15 16:34 #@Author:YJ #@File: main.py.py #@Sofeware: PyCharm from socket import * from time import ctime import time # 作为tcp服务端 addr = ("私有ip", 9000) tcpServerSocket = socket(AF_INET, SOCK_STREAM) tcpServerSocket.bind(addr) tcpServerSocket.listen(10) def main(): try: while True: print(wait for connection...) conn, client_addr = tcpServerSocket.accept() print(connection form , client_addr) while True: conn.send(([%s] % ctime()).encode(utf-8)) time.sleep(1) except Exception as e: print(e) if __name__ == __main__: main()

接下来进行云服务器端口号访问规则的配置。

首先打开阿里云服务器控制台,选择安全组->配置,也可以在实例界面查看到公有、私有ip

鼠标单机配置规则

手动添加端口号9000的访问规则,相关配置按照图示配置即可。

在pycharm界面点击Start SSH session来远程链接云服务器,默认链接时使用的端口号为22。

选择第三个选项。

在云服务器终端界面输入下面几行命令来设置防火墙添加开放普通端口

sudo ufw allow 9000sudo ufw reloadsudo ufw status #查看端口开放状态

设置完成后,右键运行上面的代码,此时这段代码就已经在云服务器上跑起来了。

到这里云服务器端的相关配置就结束了。

2.本地端:

首先在pycharm新建工程,选择本地解释器,新建tcpClient.py文件,将下面的代码拷贝到该py文件中。注意修改host为公网ip,端口号选择9000。

#-*- codeing = utf-8 -*- #@Time: 2021/8/14 15:33 #@Author:YJ #@File: main.py #@Sofeware: PyCharm from socket import * import sys host = "云服务器公网ip" post = 9000 addr = (host, post) tcpClient = socket(AF_INET, SOCK_STREAM) try: remote_ip = gethostbyname(host) except gaierror: #could not resolve print (Hostname could not be resolved. Exiting) sys.exit() print(Ip address of+ host +is+ remote_ip) addr = (remote_ip, post) tcpClient.connect(addr) print(connetion success...) def main(): while True: data = tcpClient.recv(1024).decode() print(data) if __name__ == __main__: main()

右键单机运行,可以看到本地已经能够和云服务器通过socket进行通信了。

3.总结

这是我第一次尝试使用云服务器资源,在使用的过程中参考了很多的教程,其中也遇到了很多的问题,如果大家在使用的过程中也遇到了一些比较奇怪的问题,百度不能解决的话可以直接问阿里云的人工客服人员,他们会很耐心地帮助你解决问题的,当然也可以把问题发在这里的评论区进行讨论。