22M的Gif加载有点慢

paste_win_ios

特性:

  1. 支持Win10直接粘贴IOS复制内容
  2. IOS复制内容使用快捷指令传递
  3. 支持跨网段通信,即设备不在同一WIFI
  4. Win服务端开机自启

主要技术:

  1. 服务端:NodeJS
  2. 客户端:IOS快捷指令(HTTP-GET请求)
  3. 内网穿透:Zerotie One

运行环境:

  1. NodeJS 12
  2. Git Bash(用来跑Shell脚本,也可以换成Windows的.bat脚本,不过还是觉得Shell写起来顺手)

服务端

项目目录:

1
2
3
4
node_modules 项目所需模块,这里用到的node模块有clipboardy、express、internal-ip
app.js 服务端主要代码
package.json
start_paste.sh 启动脚本,使用绝对路径启动

安装依赖:

1
yarn add express clipboardy internal-ip

App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const clipboardy = require('clipboardy');
var express = require('express')
var app = express()
const port = 80
let ip = -1;
const internalIp = require('internal-ip');

// 获取本机IP地址
(async () => {
await internalIp.v4()
//=> '10.0.0.79'
})();
ip=internalIp.v4.sync()

// Api接口,接收IOS客户端传递的剪切板的值
app.get('/paste', (req, res) => {
var r = new Date()
var h = r.getHours()
var m = r.getMinutes()
var s = r.getSeconds()

// 用户输入值:req.query.val
// 格式化字符串,加上时间戳
let userinput = req.query.val;
var fmtinput = `${h}:${m}:${s} ${userinput}`
console.log(fmtinput)
userinput ? null : userinput = fmtinput + ' error'
clipboardy.writeSync(userinput)
res.send(fmtinput)
})

var r = new Date()
var h = r.getHours()
var m = r.getMinutes()
var s = r.getSeconds()

app.listen(port, () => console.log(`${h}:${m}:${s} PasteApp Service On http://${ip}:${port}`))

start_paste.sh,这里是用

1
2
3
4
5
6
# set window height=2, width=60 
# 设置Shell脚本运行窗口大小
printf '\e[8;2;60t'

# excute start command
node D:/Script/paste/app.js

这个文件可以放到Windows自启动目录下,这样开机就可以启动服务:

C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

尝试启动服务,如果服务启动成功,则服务端配置完成

1
2
$ sh start_paste.sh
20:22:17 PasteApp Service On http://192.168.1.9:80

客户端

IOS客户端的配置非常简单,只需要在快捷指令中发送一个HTTP 的GET请求,其中的URL需要填写你电脑的IP地址,这里还需要同一个局域网下,稍后我们添加一些配置,使其不需要在同一局域网下就能使用。

shortcut

然后可以将快捷指令添加到主屏幕,之后在IOS端复制文字后,直接点击频幕上粘贴至win,Window上执行Ctrl+V就可以直接粘贴IOS端复制的内容了,具体流程就像最上面的GIF呈现的一样。

image-20201114202618180

跨网段

跨网段本质上就是内网穿透,这里我们介绍Zerotie One这款工具,它可以让我们的手机和电脑在同一个局域网内,下面是Zerotie One的官网

https://www.zerotier.com/

你可以注册一个账号,然后申请一个网段,这里我申请的网段是10.144.0.0/16,分配给手机的IP地址是:10.144.0.2,分配给电脑的IP地址是10.144.0.6

image-20201114203007605

可以在电脑上右击Zerotie One的图标来查看网络信息,不过在这之前,你需要添加一个网络:

查看网络信息

点击Join Network,输入NetWork_ID 就可以添加一个网络,详细的Zerotie One用法请见B站视频教程:

https://www.bilibili.com/video/BV1yZ4y1s7jg

当电脑端和手机端的ZeritierOne都安装好之后,我们只需要把快捷指令中请求的URL改为ZerotierOne分配的IP即可

综上,手机端到电脑端的剪切板共享就完成了,剩余任有两点有待实现:

  1. 文件传输
  2. 电脑传输到手机