展示🎥
观看视频:👀,这是之前完成的一个项目,但今天我们的重点不是这个哦。
告别往昔,启航新篇章
现象🌟
- 智能互动:📱 我们每天都在享受与智能设备的互动,比如通过手机控制家中的LED灯变换色彩。💡
思考🤔
- 简化问题:让我们不要一开始就陷入复杂的技术细节,而是先思考最基本的操作——如何通过手机让灯熄灭。
基本概念📚
- 指令发送:📲 当你轻触手机屏幕时,实际上是在发送一个熄灯指令。
- 指令传播:🌐 这个指令通过无线网络,比如Wi-Fi,传播到LED灯。
通信模型📡
- 客户端与服务端:
- 客户端:📱 你的手机,作为发送指令的设备。
- 服务端:💡 LED灯或控制它的单片机,作为接收并执行指令的设备。
通信过程🔄
- 用户操作:👆 你在手机上轻触熄灯按钮。
- 指令发送:📤 手机通过网络发送熄灯指令。
- 指令接收:📥 LED灯或单片机接收到熄灯指令。
- 执行动作:🔕 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)
服务器工作原理 📖
- 创建Socket:服务器首先创建一个socket对象,这是网络通信的起点。
- 绑定地址和端口:服务器将其socket绑定到一个IP地址和端口号上,这样客户端就能通过这个地址和端口找到服务器。
- 监听:服务器开始监听指定的端口,等待客户端的连接请求。
- 接受连接:当客户端尝试连接时,服务器接受这个连接,建立一个与客户端的通信通道。
- 接收和发送数据:服务器接收客户端发送的数据,处理后可以发送响应给客户端。
- 关闭连接:数据传输完成后,服务器关闭与客户端的连接。
测试服务器 📡
为了测试我们的服务器,我们需要创建一个简单的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)
客户端工作原理 📚
- 创建Socket:客户端创建一个socket对象。
- 连接到服务器:客户端使用服务器的IP地址和端口号连接到服务器。
- 发送数据:客户端向服务器发送一条消息。
- 接收响应:客户端等待并接收服务器的响应。
- 关闭连接:通信完成后,客户端关闭与服务器的连接。
测试结果 📊
修改服务器的代码 🛠️
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地址 🖥️
- 打开命令提示符:
- 按下
Win + R
键,打开“运行”对话框。 - 输入
cmd
并按Enter
键,这将打开命令提示符(CMD)终端。
- 按下
- 查看IP地址:
- 在命令提示符窗口中,输入
ipconfig
命令。 - 按
Enter
键执行命令。
- 在命令提示符窗口中,输入
启动电脑服务端
注意: 记好此时的ip和port
手机链接电脑服务端
选择 tcp客户端
点击新增客户端
配置链接信息
链接成功
发送信息
服务端
完结
网络领域提供了极其丰富的探索和创造机会。无论是在软件开发、硬件交互还是网络安全等方面,都有许多有趣的项目和实验可以进行。