【openclaw+claude系列04】打通任督二脉——手机与电脑的首次“握手“通信
手机端已经装好了,但它还"找不到"你的电脑——就像有了遥控器却还没对上频道。本文教你在电脑上部署一个 Flask 服务器,让手机通过局域网或外网连接到电脑,实现手机发指令→电脑上的 Claude 执行→结果返回手机的完整链路。还提供了 Tailscale 外网方案,让你出门在外也能远程指挥。连上了,就成功一大半!
关注公众号:weelinking | 访问官网:weelinking.com
📅 发布日期:2026年02月14日
🏷️ 标签:通信 | 配置 | 联调
⏱️ 阅读时长:15分钟
📚 系列文章:手机指挥电脑干活系列 - 第4篇
📄 文章摘要
手机端已经装好了,但它还"找不到"你的电脑——就像有了遥控器却还没对上频道。本文教你在电脑上部署一个 Flask 服务器,让手机通过局域网或外网连接到电脑,实现手机发指令→电脑上的 Claude 执行→结果返回手机的完整链路。还提供了 Tailscale 外网方案,让你出门在外也能远程指挥。连上了,就成功一大半!
关键词: #Flask #远程通信 #Tailscale #内网穿透 #weelinking
一、前言:最关键的一步
上一篇我们在手机上安装了 Claude 客户端,可以直接与 Claude AI 对话。
但这还不够酷!我们的终极目标是:手机发指令 → 电脑上的 Claude 执行 → 结果返回手机。
这一篇我们要完成的关键任务:
- ✅ 在电脑上部署一个服务端
- ✅ 手机通过网络连接到电脑
- ✅ 实现手机→电脑→Claude 的完整链路
连上了,就成功了一大半!
💡 本文所有操作均在 weelinking 上完成——国内直连 Claude,无需魔法,按量付费,新用户注册即送额度。
二、整体方案
我们采用一个简单实用的方案:
📱 手机 <--HTTP--> 💻 电脑(Flask服务) <--> Claude API
工作流程:
- 电脑上运行一个 Flask 服务器
- 手机通过 HTTP 请求发送指令
- 服务器调用 Claude API 执行任务
- 结果返回给手机
三、电脑端部署(服务端)
3.1 环境准备
Windows / Mac / Linux 都适用
确保已安装 Python 3.8+:
python --version
# 或
python3 --version
3.2 创建服务端项目
步骤1:创建项目目录
# Windows CMD/PowerShell
mkdir C:\claude-server
cd C:\claude-server
# Mac/Linux
mkdir ~/claude-server
cd ~/claude-server
步骤2:安装依赖
# 安装 Flask 和 anthropic
pip install flask anthropic flask-cors
# 如果是 Mac/Linux,使用 pip3
pip3 install flask anthropic flask-cors
步骤3:创建服务端代码
创建文件 server.py:
from flask import Flask, request, jsonify
from flask_cors import CORS
import anthropic
import os
app = Flask(__name__)
CORS(app) # 允许跨域请求
# 配置 Claude API
API_KEY = "你的API_KEY" # 替换为你的 Weelinking API Key
BASE_URL = "https://api.weelinking.com/v1"
client = anthropic.Anthropic(
api_key=API_KEY,
base_url=BASE_URL
)
# 存储对话历史
conversations = {}
@app.route('/')
def home():
"""首页"""
return '''
<h1>Claude Remote Server</h1>
<p>服务运行中...</p>
<p>API端点: POST /api/chat</p>
'''
@app.route('/api/chat', methods=['POST'])
def chat():
"""处理聊天请求"""
try:
data = request.json
user_message = data.get('message', '')
session_id = data.get('session_id', 'default')
if not user_message:
return jsonify({'error': '消息不能为空'}), 400
# 获取或创建会话历史
if session_id not in conversations:
conversations[session_id] = []
# 构建消息历史(保留最近5轮对话)
messages = conversations[session_id][-10:] # 最近5轮=10条消息
messages.append({
"role": "user",
"content": user_message
})
# 调用 Claude API
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
messages=messages
)
assistant_message = response.content[0].text
# 保存对话历史
messages.append({
"role": "assistant",
"content": assistant_message
})
conversations[session_id] = messages
return jsonify({
'success': True,
'response': assistant_message,
'session_id': session_id
})
except Exception as e:
return jsonify({
'success': False,
'error': str(e)
}), 500
@app.route('/api/reset', methods=['POST'])
def reset():
"""重置对话历史"""
data = request.json
session_id = data.get('session_id', 'default')
if session_id in conversations:
conversations[session_id] = []
return jsonify({'success': True, 'message': '对话已重置'})
@app.route('/api/status', methods=['GET'])
def status():
"""检查服务状态"""
return jsonify({
'status': 'running',
'active_sessions': len(conversations)
})
if __name__ == '__main__':
# 获取本机 IP
import socket
hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)
print("=" * 60)
print("🚀 Claude Remote Server 启动成功!")
print("=" * 60)
print(f"本地访问: http://localhost:5000")
print(f"局域网访问: http://{local_ip}:5000")
print("=" * 60)
print("API 接口说明:")
print(" POST /api/chat - 发送消息")
print(" POST /api/reset - 重置对话")
print(" GET /api/status - 服务状态")
print("=" * 60)
# 启动服务(监听所有网络接口)
app.run(host='0.0.0.0', port=5000, debug=False)
步骤4:配置 API Key
编辑 server.py,找到这一行:
API_KEY = "你的API_KEY" # 替换为你的 Weelinking API Key
替换为你从 Weelinking 获取的真实 API Key。
步骤5:启动服务
python server.py
# 或
python3 server.py
如果看到类似下面的输出,说明启动成功:
===========================================================
🚀 Claude Remote Server 启动成功!
============================================================
本地访问: http://localhost:5000
局域网访问: http://192.168.1.100:5000
============================================================
API 接口说明:
POST /api/chat - 发送消息
POST /api/reset - 重置对话
GET /api/status - 服务状态
============================================================
记住这个局域网 IP 地址(如 192.168.1.100),手机端要用!
3.3 防火墙配置
Windows:
# 以管理员身份运行 PowerShell
netsh advfirewall firewall add rule name="Claude Server" dir=in action=allow protocol=TCP localport=5000
Mac:
系统偏好设置 → 安全性与隐私 → 防火墙 → 防火墙选项 → 添加 Python
Linux:
sudo ufw allow 5000/tcp
四、手机端配置(客户端)
4.1 确认网络连通
步骤1:手机连接到同一WiFi
确保手机和电脑在同一WiFi网络下。
步骤2:测试连接
在手机浏览器中访问:
http://192.168.1.100:5000
(替换为你电脑的实际 IP)
如果看到 “Claude Remote Server” 页面,说明连接成功!
4.2 创建手机端客户端
Android (Termux)
在上一篇的基础上,创建新的客户端脚本:
cd ~/claude-mobile
cat > remote_client.py << 'EOF'
#!/usr/bin/env python3
import requests
import sys
import json
# 配置服务器地址
SERVER_URL = "http://192.168.1.100:5000" # 替换为你电脑的 IP
SESSION_FILE = "session_id.txt"
def get_session_id():
"""获取或创建 session ID"""
try:
with open(SESSION_FILE, 'r') as f:
return f.read().strip()
except:
import uuid
session_id = str(uuid.uuid4())
with open(SESSION_FILE, 'w') as f:
f.write(session_id)
return session_id
def send_message(message):
"""发送消息到服务器"""
try:
session_id = get_session_id()
response = requests.post(
f"{SERVER_URL}/api/chat",
json={
"message": message,
"session_id": session_id
},
timeout=30
)
if response.status_code == 200:
data = response.json()
if data.get('success'):
return data.get('response')
else:
return f"错误: {data.get('error')}"
else:
return f"请求失败: {response.status_code}"
except requests.exceptions.ConnectionError:
return "❌ 连接失败!请检查:\n1. 电脑服务是否运行\n2. IP地址是否正确\n3. 是否在同一WiFi"
except Exception as e:
return f"错误: {str(e)}"
def main():
if len(sys.argv) > 1:
message = ' '.join(sys.argv[1:])
else:
message = input("请输入指令: ")
print(f"\n📱 发送指令: {message}\n")
print("⏳ 等待电脑上的 Claude 响应...\n")
result = send_message(message)
print("=" * 50)
print("💻 电脑上的 Claude 回复:")
print("=" * 50)
print(result)
print("=" * 50)
if __name__ == "__main__":
main()
EOF
chmod +x remote_client.py
# 安装 requests 库
pip install requests
配置服务器地址:
编辑文件,替换 IP:
nano remote_client.py
# 找到这一行:
# SERVER_URL = "http://192.168.1.100:5000"
# 替换为你电脑的实际 IP
# 保存: Ctrl+X → Y → Enter
测试运行:
python remote_client.py "你好,请问你现在运行在哪台设备上?"
iOS (快捷指令)
更新之前创建的快捷指令:
操作1: 询问输入
提示: "请输入指令"
操作2: 获取 URL 内容
URL: http://192.168.1.100:5000/api/chat
方法: POST
请求头:
- Content-Type: application/json
请求正文: JSON
{
"message": "提供的输入",
"session_id": "ios-session"
}
操作3: 从字典中获取值
键: response
操作4: 显示通知
内容: 获取的值
五、完整链路测试
5.1 基础对话测试
Android:
python remote_client.py "介绍一下你自己"
iOS:
运行快捷指令,输入 “介绍一下你自己”
5.2 编程任务测试
写一个 Python 函数,实现二分查找
Claude 应该会返回完整的代码和解释。
5.3 上下文测试(验证历史记忆)
第1次:
请记住,我的名字叫张三
第2次:
我叫什么名字?
如果 Claude 能回答"张三",说明对话历史功能正常!
六、外网访问方案(可选)
如果想在外面也能用,推荐使用 Tailscale。
6.1 安装 Tailscale
电脑端:
- Windows/Mac: 访问 https://tailscale.com/download
- Linux:
curl -fsSL https://tailscale.com/install.sh | sh
手机端:
- Android: Play Store 搜索 Tailscale
- iOS: App Store 搜索 Tailscale
6.2 配置 Tailscale
- 电脑和手机都安装并登录同一个 Tailscale 账号
- 启动 Tailscale
- 电脑会获得一个 Tailscale IP (如 100.64.1.2)
6.3 修改手机端配置
将手机端的 SERVER_URL 改为 Tailscale IP:
SERVER_URL = "http://100.64.1.2:5000" # Tailscale IP
现在即使在外面,只要手机有网,就能连接电脑了!
看到这里,是不是想自己试试?
现在就可以开始——点击注册 weelinking,国内直连 Claude,新用户有免费额度,够你把今天的内容完整跑一遍。
七、进阶功能
7.1 添加文件查看功能
修改 server.py,添加文件查看接口:
@app.route('/api/file', methods=['POST'])
def read_file():
"""读取文件内容"""
try:
data = request.json
file_path = data.get('path', '')
# 安全检查:只允许读取特定目录
allowed_paths = [
os.path.expanduser('~/'), # 用户目录
'C:\\' if os.name == 'nt' else '/' # 根目录
]
# 读取文件
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
return jsonify({
'success': True,
'content': content,
'path': file_path
})
except Exception as e:
return jsonify({
'success': False,
'error': str(e)
}), 400
7.2 添加系统命令执行
import subprocess
@app.route('/api/command', methods=['POST'])
def execute_command():
"""执行系统命令(危险!仅限信任的客户端)"""
try:
data = request.json
command = data.get('command', '')
# 安全检查:命令白名单
allowed_commands = ['ls', 'dir', 'git status', 'python --version']
if command not in allowed_commands:
return jsonify({
'success': False,
'error': '不允许执行此命令'
}), 403
result = subprocess.run(
command,
shell=True,
capture_output=True,
text=True,
timeout=10
)
return jsonify({
'success': True,
'output': result.stdout,
'error': result.stderr
})
except Exception as e:
return jsonify({
'success': False,
'error': str(e)
}), 500
八、常见问题排查
问题1:手机连不上电脑
排查清单:
# 1. 确认电脑服务运行中
# 看 server.py 是否还在运行
# 2. 确认防火墙已放行
# Windows: 检查防火墙设置
# Mac/Linux: 检查 ufw 状态
# 3. 确认 IP 地址正确
# 电脑端:
ipconfig # Windows
ifconfig # Mac/Linux
# 4. ping 测试
# 手机端(Termux):
ping 192.168.1.100
问题2:连接成功但无响应
检查:
- API Key 是否正确
- 网络是否能访问 Weelinking
- 查看服务端日志是否有错误
问题3:对话历史不工作
检查:
- session_id 是否正确传递
- 服务端是否重启过(重启会清空内存中的历史)
九、总结与下期预告
本期完成的内容
- ✅ 电脑端部署 Flask 服务器
- ✅ 手机端连接到电脑
- ✅ 实现手机→电脑→Claude 完整链路
- ✅ 支持对话历史记忆
- ✅ 可选的外网访问(Tailscale)
当前状态
✅ 手机端配置完成
✅ 电脑端服务部署完成
✅ 通信链路打通
⏸️ Claude 高级能力待开发
下期预告
第5篇:给电脑装上最强大脑——Claude 桌面客户端安装与配置
- 安装 Claude Desktop
- 配置工具权限(文件、命令执行)
- 与当前服务整合
- 让 Claude 能真正操作电脑
练习作业
- 尝试让 Claude 记住一些信息,然后重新询问
- 测试较长的代码生成任务
- 如果有条件,配置 Tailscale 实现外网访问
在评论区分享你的测试结果和遇到的问题!
🔗 开始使用 Claude
文中的所有操作,你现在就可以上手。
推荐使用 weelinking 访问 Claude:
| 优势 | 说明 |
|---|---|
| 🇨🇳 国内直连 | 无需任何网络配置,打开即用 |
| 💰 按量付费 | 用多少花多少,不浪费 |
| 🎁 新用户福利 | 注册即送体验额度 |
| ⚡ 稳定可靠 | 账号池技术,不掉线 |
🔜 下期预告
「给电脑装上最强大脑——Claude 桌面客户端安装与配置」
通信链路已打通,下一篇我们让 Claude 真正拥有"操作电脑"的能力——读写文件、执行命令、运行代码,从"能聊天"升级到"能干活"。
👉 点击关注,下篇第一时间通知你。
📖 推荐阅读
如果这篇对你有帮助,以下文章你也会喜欢:
- [Claude Skill 的四大骨架模式详解] — 理解 Claude Skill 的核心架构模式
- [企业级 Claude Skill 库搭建与管理] — 从个人使用扩展到团队协作
- [产品经理用 Claude 实现产品] — 不写代码也能做出完整产品
📦 本篇配套资源
- ✅ Flask 服务端完整代码(server.py)
- ✅ 手机端客户端脚本(remote_client.py)
- ✅ 防火墙配置指南(Windows/Mac/Linux)
- ✅ 连接排查流程图
- 📷 需补充:连接成功的手机截图
📌 系列导航: 手机+OpenClaw+Claude实现远程AI编程系列大纲
⏩ 上一篇: 第3篇:手机秒变 AI 遥控器——OpenClaw 手机端安装全攻略
⏩ 下一篇: 第5篇:Claude桌面客户端安装与配置
💡 本系列全程使用 weelinking 访问 Claude,国内可稳定使用
🚀 整个系列的核心理念:你不需要变成程序员,你只需要从"找人做"变成"自己能做"。
更多推荐



所有评论(0)