轻松打造:用Python实现手机与电脑间的简易消息系统

news2024/11/15 9:47:54

展示🎥

观看视频:👀,这是之前完成的一个项目,但今天我们的重点不是这个哦。

告别往昔,启航新篇章

现象🌟

  • 智能互动:📱 我们每天都在享受与智能设备的互动,比如通过手机控制家中的LED灯变换色彩。💡

思考🤔

  • 简化问题:让我们不要一开始就陷入复杂的技术细节,而是先思考最基本的操作——如何通过手机让灯熄灭。

基本概念📚

  • 指令发送:📲 当你轻触手机屏幕时,实际上是在发送一个熄灯指令。
  • 指令传播:🌐 这个指令通过无线网络,比如Wi-Fi,传播到LED灯。

通信模型📡

  • 客户端与服务端
    • 客户端:📱 你的手机,作为发送指令的设备。
    • 服务端:💡 LED灯或控制它的单片机,作为接收并执行指令的设备。

通信过程🔄

  1. 用户操作:👆 你在手机上轻触熄灯按钮。
  2. 指令发送:📤 手机通过网络发送熄灯指令。
  3. 指令接收:📥 LED灯或单片机接收到熄灯指令。
  4. 执行动作:🔕 LED灯熄灭,执行了你的指令。

技术要点🛠️

  • 网络协议:🔗 客户端和服务端之间通信使用的规则,比如HTTP或MQTT。
  • 安全性:🛡️ 保护你的指令在传输过程中不被未授权访问。

用所学知识简单实现 🚀

回顾知识

我们已经学习了网络通信的基础知识,包括TCP/IP协议以及客户端-服务器架构。现在,我们将利用Python来实现一个简单的TCP服务器。

创建TCP服务器 🖥️

首先,我们需要创建一个TCP服务器,它将监听特定的端口,等待客户端的连接,并接收客户端发送的数据。

import socket

def create_server(host, port):
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定地址和端口
    server_socket.bind((host, port))
    
    # 开始监听
    server_socket.listen(5)
    print(f"服务器启动,监听在 {host}:{port}...")
    
    while True:
        # 接受一个新连接
        client_socket, addr = server_socket.accept()
        print(f"连接地址: {addr}")
        
        # 接收数据
        data = client_socket.recv(1024)
        if not data:
            break
        print(f"收到消息: {data.decode('utf-8')}")
        
        # 发送数据
        client_socket.send('消息已收到'.encode('utf-8'))
        
        # 关闭连接
        client_socket.close()

    server_socket.close()

# 服务器的IP地址和端口号
host = '127.0.0.1'
port = 12345

# 启动服务器
create_server(host, port)

服务器工作原理 📖

  1. 创建Socket:服务器首先创建一个socket对象,这是网络通信的起点。
  2. 绑定地址和端口:服务器将其socket绑定到一个IP地址和端口号上,这样客户端就能通过这个地址和端口找到服务器。
  3. 监听:服务器开始监听指定的端口,等待客户端的连接请求。
  4. 接受连接:当客户端尝试连接时,服务器接受这个连接,建立一个与客户端的通信通道。
  5. 接收和发送数据:服务器接收客户端发送的数据,处理后可以发送响应给客户端。
  6. 关闭连接:数据传输完成后,服务器关闭与客户端的连接。

测试服务器 📡

为了测试我们的服务器,我们需要创建一个简单的TCP客户端,它将连接到服务器并发送一些数据。

import socket

def create_client(server_host, server_port):
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接到服务器
    client_socket.connect((server_host, server_port))
    
    # 发送数据
    message = '你好,服务器!'
    client_socket.send(message.encode('utf-8'))
    
    # 接收响应
    data = client_socket.recv(1024)
    print(f"服务器响应: {data.decode('utf-8')}")
    
    # 关闭连接
    client_socket.close()

# 客户端连接的服务器地址和端口
server_host = '127.0.0.1'
server_port = 12345

# 启动客户端
create_client(server_host, server_port)

客户端工作原理 📚

  1. 创建Socket:客户端创建一个socket对象。
  2. 连接到服务器:客户端使用服务器的IP地址和端口号连接到服务器。
  3. 发送数据:客户端向服务器发送一条消息。
  4. 接收响应:客户端等待并接收服务器的响应。
  5. 关闭连接:通信完成后,客户端关闭与服务器的连接。

测试结果 📊

在这里插入图片描述

修改服务器的代码 🛠️

import socket


def create_server(host, port):
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定地址和端口
    server_socket.bind((host, port))

    # 开始监听
    server_socket.listen(5)
    print(f"服务器启动,监听在 {host}:{port}...")

    while True:
        # 接受一个新连接
        client_socket, addr = server_socket.accept()
        print(f"连接地址: {addr}")

        # 接收数据
        data = client_socket.recv(1024)
        if not data:
            break
        print(f"收到消息: {data.decode('utf-8')}")

        # 根据接收到的数据控制灯的状态
        if data.decode('utf-8') == 'off':
            client_socket.send('The lights have been turned off'.encode('utf-8'))
        elif data.decode('utf-8') == 'on':
            client_socket.send('The lights are on'.encode('utf-8'))
        else:
            print("未知指令")
            client_socket.send('Unknown directives'.encode('utf-8'))

        # 关闭连接
        client_socket.close()

    server_socket.close()


# 服务器的IP地址和端口号
host = '127.0.0.1'
port = 12345

# 启动服务器
create_server(host, port)
实现功能 🎯
  • 手机发送 off 服务端发送 The lights have been turned off
  • 手机发送 on 服务端发送 The lights are on
注意事项 ⚠️
  • 确保手机和电脑位于同一局域网内。
  • 服务端的IP地址应为IPv4地址,不应使用回环地址(如127.0.0.1),除非手机和电脑在同一设备上。
  • 客户端一般应用是发送的都是很简短的字符

如何查看电脑的IPv4地址 🖥️

  1. 打开命令提示符
    • 按下 Win + R 键,打开“运行”对话框。
    • 输入 cmd 并按 Enter 键,这将打开命令提示符(CMD)终端。
      在这里插入图片描述
  2. 查看IP地址
    • 在命令提示符窗口中,输入 ipconfig 命令。
    • Enter 键执行命令。
      在这里插入图片描述

启动电脑服务端

在这里插入图片描述
注意: 记好此时的ip和port

手机链接电脑服务端

选择 tcp客户端

在这里插入图片描述

点击新增客户端

在这里插入图片描述

配置链接信息

在这里插入图片描述

链接成功

在这里插入图片描述

发送信息

在这里插入图片描述

服务端

在这里插入图片描述

完结

网络领域提供了极其丰富的探索和创造机会。无论是在软件开发、硬件交互还是网络安全等方面,都有许多有趣的项目和实验可以进行。

👇 源码资料获取 · 技术与交流 👇

在这里插入图片描述

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

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

相关文章

作为HR,如何考察候选人的沟通能力

如何考察候选人的沟通能力。沟通能力,这个听起来简单,实际上却是一个非常复杂的技能,它关乎到一个人能否有效地传递信息,理解他人,并且在团队中发挥积极的作用。 作为HR,我们应该怎样才能精准地把握住候选…

鸿蒙开发(HarmonyOS)组件化浅谈

众所周知,现在组件化在移动开发中是很常见的,那么组件化有哪些好处: 1. 提高代码复用性:组件化允许将应用程序的不同功能模块化,使得这些模块可以在不同的项目中重复使用,从而提高开发效率并减少重复工作。…

JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析

拼多多2面,还是模拟拼团,要求用户拼团成功后,提交订单支付金额。 之前我们在系列(8)《CountDownLatch核心原理》,实现过拼团场景。但是CountDownLatch里调用countDown()方法后,线程还是可以继续执行后面的代码&#xf…

【云安全】云上资产发现与信息收集

一、云基础设施组件 1、定义 在云计算基础架构中,基础设施组件通常包括:计算、存储、网络和安全等方面的资源。例如,计算资源可以是虚拟机、容器或无服务器计算引擎;存储资源可以是对象存储或块存储;网络资源可以是虚拟…

数字电路与逻辑设计-计数器逻辑功能测试

一.实验目的 1.验证用触发器构成的计数器计数原理; 2.掌握测试中规模集成计数器功能的方法; 二.实验原理 时序逻辑电路中,有一种电路称为计数器,计数器是用来对时钟脉冲进行计数的…

稳联Profinet转Canopen网关携手伺服,高效提升生产效率

在当今的工业生产领域,追求高效、精准和可靠的生产方式是企业不断努力的方向。稳联技术Profinet转Canopen(WL-ABC3033)网关与伺服系统的携手合作,为提高生产效率带来了新的机遇和突破。 实现无缝通信,优化生产流程稳联…

Flink提交任务

第3章 Flink部署 3.1 集群角色 3.2 Flink集群搭建 3.2.1 集群启动 0)集群规划 表3-1 集群角色分配 具体安装部署步骤如下: 1)下载并解压安装包 (1)下载安装包flink-1.17.0-bin-scala_2.12.tgz,将该jar包…

无人机之控制距离篇

无人机的控制距离是一个复杂且多变的概念,它受到多种因素的共同影响。以下是对无人机控制距离及其影响因素的详细分析: 一、无人机控制距离的定义 无人机控制距离指的是遥控器和接收机之间的最远传输距离。这个距离决定了无人机在操作者控制下能够飞行的…

2024年氧化工艺证考试题库及氧化工艺试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年氧化工艺证考试题库及氧化工艺试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的氧化…

VM+Ubuntu16.04硬盘扩容

步骤: 用df -h查看自己虚拟机的硬盘空间使用情况在虚拟机下安装gparted软件备用 sudo apt-get install gparted在VM的界面或者Windows终端修改虚拟机硬盘大小回到虚拟机的gparted软件里,修改分区,先删除原有的逻辑分区和扩展分区&#xff0c…

一键快速替换PPT上的字体?这个你一定要学会。

前言 最近有个朋友在做PPT,说是准备在各大平台分发,咨询小白关于PPT上内容的事情,结果小白问了一句:字体用的是什么? 嗯……她说是:汉仪黑和字魂。 好家伙,这不是妥妥的当别人财神爷的机会吗&…

是的,第一个在Domino中整个AI本地大语言模型的开源项目已经发布

大家好,才是真的好。 做梦也没想到,上一篇《Notes,无代码应用开发王者归来!》居然又一次焕发了卓越的青春活力,阅读量超高。真希望能再接再厉,续创辉煌。 但今天咱们怎么也不能再讲HCL Notes/Dmino 14.5 …

Vue3 : Pinia的性质与作用

目录 一.性质 二.作用 三.Pinia 的核心概念 四.使用 1.count.ts 2.count.vue Vue 3 中 Pinia 是一个专为 Vue 3 设计的状态管理库,它旨在提供一种简单、直观的方式来管理应用的状态。 一.性质 1.集成性:Pinia 是 Vue 3 官方推荐的状态管理库&…

Linux C高级 day2

一、 1.mkdir ../dir1 && touch ../dir/file 2.cp -r /mnt/dir1/* /home/dir2 3.pwd 4.ls -l 5.ip或ifconfig 6.top 7.ps aux | grep python 8.kill -9 7580 9.ping 10.find /usr -type f -name *name* 11. a-> 输入内容->ese->shift冒号 wq回车 …

JAVA-期末成绩计算

要求 总评成绩 期末成绩*0.6 平时成绩*0.4 输入总评成绩和平时成绩&#xff0c;输出期末成绩要考几分&#xff08;0<平时成绩<40&#xff0c;0<总评成绩<100&#xff09; 要求能多次运行&#xff08;退出程序停止&#xff09; 代码 import java.util.Scanne…

Java 多态(难)

1. 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。 2&#xff0e;一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。 举例说明&#xff1a;新建两个类&#xff0c;Person类和Student类&#xff0c;Student类继承Person类&#xff1a…

背景图鼠标放上去切换图片过渡效果

文章目录 css鼠标放上去之前效果鼠标放上去时效果 css <li class"message"></li>.message {width: 22px;height: 22px;background-image: url(/assets/message-01.png);background-size: cover;background-position: center;transition: background-ima…

化工行业如何做数字化转型?

据红杉的一项调查报告中指出&#xff0c;国内超九成的企业&#xff08;95%&#xff09;已经开展了不同程度的数字化实践&#xff0c;并将把数字化转型作为企业的战略核心。数字化转型或者说通过数据手段来帮助企业更好发展的方式&#xff0c;已成为未来不可避免的趋势。 那么&a…

中英混杂 Style Error: [China National Standard GB/T 7714-1987 (numeric, 中文)]

Style Error: [China National Standard GB/T 7714-1987 (numeric, 中文)] etc. - Zotero ForumsStyle Error: [China National Standard GB/T 7714-1987 (numeric, 中文)] etc. 问题描述 最近发现使用zotero插入参考文献时英文的被识别成中文格式了&#xff0c;所以引用格式…

动手学深度学习(pytorch土堆)-06损失函数与反向传播、模型训练、GPU训练

模型保存与读取 完整模型训练套路 import torch import torchvision.datasets from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom model impo…