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

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信

再帮助同学坐课题的时候接触到了scoket通信,了解到这应该是基层网络通信的原理,于是就导出搜索了一下相关的资料,简单来说scoket通信就是,可以让不同设备在同一个网络环境的条件下,可以实现相互通信既可以一对一也可以一对多,总之这对开发者来说,是跨设备交互的非常好的一种方式


本文主要实现两个功能,一是python与pyhon程序之间的通信,另一个是将客户端改为手机,电脑链接手机wifi,在同一网络环境下电脑与wifi的通信。python 与 python 的交互参考的是B站白夜黑羽的教程,特此鸣谢。

python 服务器端

在多人交互通信的过程中,服务器就是一个中转站的作用,他通过配置好需要使用的参数,等待客户端的链接
在python种使用的是scoket基础库来进行实现的,也就是不需要额外安装,只要你安装了python 你导入就可以了,接下来逐步讲解下面的部分。

  • 第一步导入scoket库中的文件
from socket import *
  • 第二步初始化用到参数变量
  1. IP地址
IP = '127.0.0.1'
  1. 服务器端口号
SERVER_PORT = 50000
  1. 缓冲区读取的字节数据的大小
BUFLEN = 512
  • 第三步
    实例化一个scoket对象
    参数AF_INET 表示该scoket网络层使用的IP协议
    参数SOCK_STREAM 表示该scoket传输使用tcp协议
listenSocket = socket(AF_INET,SOCK_STREAM)
  • 第四步scoket绑定指定IP的端口
listenSocket.bind((IP,PORT))
print(f'服务端启动成功,在{PORT}端口等待客户链接...')
  • 第六步等待客户端的链接
    dataScoket为链接之后生成对象之后会调用该对象的内部函数来执行读取和发送
    addr为链接成功之后的客户端的地址
dataScoket,addr = listenSocket.accept()
print('接受一个客户端链接',addr)
  • 第六步循环监听客户端的消息,并将接收到的消息返回
    进入循环使用dataScoket监听客户端的消息,最多接收的消息为BUFLEN个字节如果返回的是一个空值,则表明客户端已经进行离线操作,则服务器程序跳出循环,执行下线程序,如果接收到了信息,则在中断打印信息并将,信息发送给客户端。
    注意:由于scoket发送的是字节数据所以发送时要对数据进行编码所以接收时候要进行解码操作也就是要给接收到的数据加个.decode()后缀,发送消息时要进行编码默认的编码给发送的数据后加上.encode()后缀,进行编码操作
while True:recved = dataScoket.recv(BUFLEN)if not recved:break#读取的字节数据是bytes类型,需要解码为字符串info = recved.decode()print(f'收到对方信息:{info}')#发送的数据类型必须是bytes,所以需要编码dataScoket.send(f'服务端收到的信息:{info}'.encode())
  • 第七步执行退出通信循环之后的关闭监听对象和通信对象
dataScoket.close()
listenSocket.close()

服务器端完整代码如下

# ==TCP 服务端程序 server.py ===
# netstat -an|find/i "5000"
from socket import *# 主机地址,表示绑定本机所有网络接口IP
IP = '127.0.0.1'
# 端口号
PORT = 50000
# 定义一次从scoket缓冲区最多读入512个字节数据
BUFLEN = 512# 实例化一个scoket对象
# 参数AF_INET 表示该scoket网络层使用的IP协议
# 参数SOCK_STREAM 表示该scoket传输使用tcp协议
listenSocket = socket(AF_INET,SOCK_STREAM)# socket绑定地址核端口
listenSocket.bind((IP,PORT))# 使scoket处于监听状态,等待客户端的链接请求
# 参数5表示 最多接受多少个等待连接的客户端
listenSocket.listen(5)
print(f'服务端启动成功,在{PORT}端口等待客户链接...')dataScoket,addr = listenSocket.accept()
print('接受一个客户端链接',addr)while True:recved = dataScoket.recv(BUFLEN)if not recved:break#读取的字节数据是bytes类型,需要解码为字符串info = recved.decode()print(f'收到对方信息:{info}')#发送的数据类型必须是bytes,所以需要编码dataScoket.send(f'服务端收到的信息:{info}'.encode())# 服务段也调用close() 关闭scoket
dataScoket.close()
listenSocket.close()

python 客户端

前面的步骤和服务器端基本一样,所以我这里进行一些合并

  • 第一步从scoket中导入全部内容,设置IP地址,服务端口号,以及待接收缓冲区字节长度
from socket import *IP = '127.0.0.1'
SERVER_PORT = 50000
BUFFLEN = 512
  • 第二步实例化scoket对象指明协议
    参数AF_INET 表示该scoket网络层使用的IP协议
    参数SOCK_STREAM 表示该scoket传输使用tcp协议
dataScoket = socket(AF_INET,SOCK_STREAM)
  • 第三步与服务器端的scoket链接
dataScoket.connect((IP,SERVER_PORT))
  • 第四步进行通信循环
    通过input函数接收输入信息,如果接收到exit则退出通信循环,进行关闭scoket对象指令,使用dataScoket.send(toSend.encode())发送从键盘输入的消息,使用reved = dataScoket.recv(BUFFLEN)接收服务端发来的消息,如果服务器端返回了一个空消息则关闭了链接,则退出客户端的通信循环,执行关闭scoket对象指令操作。
while True:toSend = input('>>> ')if toSend =='exit':break# 发送消息,也要编码为bytesdataScoket.send(toSend.encode())# 等待接受服务段的消息reved = dataScoket.recv(BUFFLEN)# 如果返回空bytes,表示对方关闭了链接if not  reved:breakprint(reved.decode())
  • 关闭scoket对象
// A code block
var foo = 'bar';

客户端完整代码如下

from socket import *IP = '127.0.0.1'
SERVER_PORT = 50000
BUFFLEN = 512# 实例化一个scoket对象,指明协议
dataScoket = socket(AF_INET,SOCK_STREAM)# 链接服务端scoket
dataScoket.connect((IP,SERVER_PORT))while True:toSend = input('>>> ')if toSend =='exit':break# 发送消息,也要编码为bytesdataScoket.send(toSend.encode())# 等待接受服务段的消息reved = dataScoket.recv(BUFFLEN)# 如果返回空bytes,表示对方关闭了链接if not  reved:breakprint(reved.decode())dataScoket.close()

代码运行效果

首先运行服务器端程序
显示服务器启动在50000号端口等待链接
在这里插入图片描述
之后运行客户端程序,服务端显示已经接收一个
在这里插入图片描述在客户端输入一个消息并发送,接收到了服务器端返回的握手信息
在这里插入图片描述
服务器端显示接收信息
在这里插入图片描述

手机软件与电脑通信

本文使用的手机软件是华南理工大学杨道全老师开发的APP inventor2 汉化增强版,目前已经收费但是仍有一定的使用期。
APP inventor2网站链接: https://www.wxbit.com/?loginref
我这里免费提供apk以及项目文件aia,以及我在网上找的scoket 客户端插件
如果你不想开会员想用免费的你就用APP INVNETOR1导入插件,再制作软件,文章最后我会给出APP INVENTOR2的代码块。
APP inventor1链接: http://app.gzjkw.net/login/

文件链接: https://pan.baidu.com/s/16HFo0gJxcLPzBUSDyEG7dA
提取码:5wow

在这里插入图片描述

aia文件导入方法请移步这篇文章前段
链接: https://blog.csdn.net/chrnhao/article/details/112758514

apk 文件直接用微信发给手机然后使用QQ浏览器安装即可
手机端实现的是客户端的程序,电脑需要运行服务器程序

将手机APP与电脑置于一个网段下

问题来了关键点怎么让手机和电脑能通过网络通信呢
其实有两种方法,第一种就是买一个服务器阿里云或者腾讯云,在云服务器上部署Scoket通信服务端然后,使用电脑和手机两个客户端程序通过服务器程序进行通信。这个过程就比较复杂,在这里我们弄一个简单的方法,就是电脑连手机热点。

首先开启手机热点,电脑连接手机热点。
之后我们要查看热点的IP地址这里也有两种方法

  • 找到电脑又下角的wifi图标
    在这里插入图片描述
    连接上热点之后点击热点下面的属性
    在这里插入图片描述
    滑倒底部查看IPv4的地址,OK这就是我们要填在手机和客户端里的地址了
    在这里插入图片描述
    或者运行如下代码,其打印的就会是目前连接的IP地址,这里不需要去知道为什么,其实没什么用。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# get local machine IP address
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
print(ip)
s.close()

在这里插入图片描述

然后我们把这个IP地址输入到我们最开始连接的服务端程序中,设置端口号为5000,运行成功之后等待连接这时候我们打开手机
在这里插入图片描述
注意必须用你开热点的手机打开这个APP
在上方填入IP地址和端口号点击连接
在这里插入图片描述
手机这里会提示链接成功
在这里插入图片描述

然后电脑的服务器端会显示收到一个客户的信息显示已经接收到一个客户端连接,兵并且收到手机客户端给电脑服务器端发送的已连接的消息。
在这里插入图片描述
接下来就能通信了在手机上随便发点消息就好
在这里插入图片描述
以上就完成了夸设备连接的基础入门,可以做一些非常简单的开发。

接下来我把APP INVENTOR2汉化增强版的代码块贴上
为了降低学习难度,所以只用了非常少的代码块
在这里插入图片描述

结束以及后续已经完成的工作

虽然实现了scoket的跨设备通信

但是会存在非常明显的题
上面的基础实例只能实现一对一聊天,并不能实现多对多,而且客户端的代码是单线程的,发送消息和接收消息是线性关系,也就是发送了一条消息之后,接收一条消息,然后等待发送消息,在等待键盘输入要发的消息的过程中客户端是接收不到任何信息的,所以需要把客户端的程序改成两个线程一个负责接收一个负责发送,之后就是更改服务器端,让服务器端可以连接多个客户端,而且可以监听每个客户端耳的消息且广播给各个客户端,实现结果如下。

服务器可以监听多个客户端的连接,且可以接收多个客户端的发送的信息
我进行了如下的操作步骤

  1. 运行服务端程序
  2. 运行客户端1程序
  3. 运行客户端2程序
  4. 使用客户端1发送消息12345
  5. 使用客户端2发送消息1564565
    最终三个控制台输出结果如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    实现了广播通信了之后我申请了一个阿里云服务器,在上面搭建了scoket客户端
    实现了广播,服务器私发,设备与设备通过服务器私发功能,服务器端用pyside2制作了一个简易的的客户端软件
    在这里插入图片描述
    在这里插入图片描述
    服务器对客户端私发
    在这里插入图片描述
    如果这篇文章看的人多了,且有需要的话,我再把结束部分内容更新了,或者有这方面需要的话可以留言或者私信联系我。
    好完结撒花

相关文章:

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信,了解到这应该是基层网络通信的原理,于是就导出搜索了一下相关的资料,简单来说scoket通信就是,可以让不同设备在同一个网络环境的条件下,可以实现相互通…...

软考高级之系统架构师之系统安全性和保密性设计

今天是2023年08月31日,距离软考高级只有65天,加油! 备注:资料搜集自网络。 基础 信息必须依赖于存储、传输、处理及应用的载体(媒介)而存在。信息系统安全可以划分设备安全、数据安全、内容安全和行为安…...

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。 一、设计思路 前面通过SOPC之NIOS Ⅱ实现电…...

C++中的volatile

volatile的本意是“易变的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可…...

数学建模--一维插值法的多种插值方式的Python实现

目录 1.算法流程步骤 2.算法核心代码 3.算法效果展示 1.算法流程步骤 #算法的核心就是利用scipy中的interpolate来完成工作 #一共是5种一维插值算法形式: #插值方法:1.阶梯插值 2.线性插值 3.2阶样条插值 4.3阶样条插值 #"nearest"阶梯插值 #"zero&…...

爱校对:让法律、医疗、教育行业的文本更加无懈可击

在今天这个信息爆炸的世界里,文本准确性成了法律、医疗和教育这些严谨行业中一个不能忽视的要点。一个小错误可能造成严重的后果,甚至影响人们的生命和事业。这正是为什么更多的专业人士开始选择使用“爱校对”来确保他们的文档、研究和通讯无懈可击。 法…...

使用pip下载第三方软件包报错超时处理方法

报错如下: WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘ReadTimeoutEr ror(“HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. (read timeout15)”)’: /p…...

计算古坐标——基于GPlates Web Service的坐标点重建

Gplates客户端和在线门户,pygplates和gplately是存在内在联系的应用,它们主要实现可视化,输入板块模型和化石点的现今坐标信息,在GPlates中可视化呈现,点位的坐标计算并不展现。而rgplates利用R语言提供了直接进行坐标…...

智安网络|加强软件供应链安全保障:共同抵御威胁的关键路径

在当今数字化时代,软件供应链安全成为了一个备受关注的话题。各行各业都依赖于软件产品和服务来支持其业务运营。然而,随着供应链的不断扩大和复杂化,软件供应链安全问题也日益突出。那么应该如何解决? 首先,软件供应…...

华为Mate 60系列发售,北斗卫星通信技术进一步深入大众消费市场

近日,华为Mate 60系列手机在没有举办发布会的情况下在官方商城突然上架开售,人气火爆。 值得一提的是,华为Mate60 Pro支持卫星通话,无地面网络时,也能拨打和接听卫星电话,还可自由编辑卫星消息。华为 Mate6…...

Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping)

Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping),是一种用于解释卷积神经网络决策的方法。它通过可视化模型对于给定输入的关注区域来提供洞察。 原理: Grad-CAM的关键思想是将输出类别的梯度(相对于特定卷积…...

程序发布——使用pyinstaller打包识别程序为exe可执行文件 详解

当我们使用python完成项目开发后,必然面对着如何将自己的程序分享给其他人使用,这就离不开程序的打包工作。对于大多数人而言,我们还是使用windows电脑居多,因此我们在大多数场景是需要将程序打包为exe的可执行文件。笔者将在本章节详细介绍使用pyinstaller进行打包的全过程…...

Docker 使用

简介 Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 Docker…...

电脑c盘变红满了怎么清理?4个方法轻松清理!

“我的电脑才用了不到一年,现在就已经满了!电脑c盘变红满了应该怎么清理呢?有什么方法能帮我清理的干净一点吗?希望大家给我出出主意。” 随着我们使用电脑时间的增多,电脑C盘可能会变得满满当当,这会不仅会…...

【UE 材质】实现角度渐变材质、棋盘纹理材质

目标 步骤 一、角度渐变材质 1. 首先通过“Mask”节点将"Texture Coordinate" 节点的R、G通道分离 2. 通过“RemapValueRange”节点将0~1范围映射到-1~1 可以看到此时R通道效果: G通道效果: 继续补充如下节点 二、棋盘纹理材质 原视频链接&…...

[深度学习]1. 深度学习知识点汇总

本文记录了我在学习深度学习的过程中遇到过的不懂的知识点,为了方便翻阅,故将其发表于此,随时更新,供大家参考。 深度学习常见知识点 1. 测试精度和训练精度 在深度学习中,测试精度和训练精度是两个重要的指标&#…...

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了,如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…...

golang通过gorm操作sqlite设置主键自增

在 Golang 中使用 GORM 操作 SQLite 数据库时,可以通过以下步骤设置主键自增: 首先,确保已经安装了 GORM 和 SQLite 的驱动程序。你可以使用以下命令安装它们: go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite导入所…...

基于Spring Boot的企业门户网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的企业门户网站设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java springboot…...

Json解析流程

一、拿到了题库 分析一下可以定义的 1、序号,用来区分题目数,每个题有唯一的序号 2、题目,就是下图的Q 3、预设的回答,下图的A 分析完我可以知道有三个字段,分别是int index、string Q、string A。 二、把字段丢到…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

网站指纹识别

网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...