前言
博主实在是懒得过分,有时候给电脑传个文件还得让我上个微信 ╯^╰,这我直接就忍不了了,反手用上学期学的计网相关知识写了一个局域网传文件文本的小工具,PC端开机自启,以后就不用上微信了(解气
以下是我写的一个小玩意(暂不完善:
ShareOnLan
本博客只是浅显的介绍一下此程序编写的思路和使用方法,查看源码请移步:
github地址:https://github.com/LCiZY/ShareOnLan
简介:
Windows Connect With Android
Windows平台与安卓在局域网下互传、发送文本、文件的小工具
包括Windows端的exe和Android端的app
开发平台与工具
Windows端是基于QT开发的一个GUI程序
Android端是基于Android Studio开发的app
运行原理&设计思路
对于PC设备A和Android设备A来说,PC设备A和Android设备A只能看到路由器A,Android设备B所在的那一层对于前面说的两个设备来说是内网设备而不可见(因为Android设备B所在的网络是属于路由器A的子网),这也就是为什么你在外面用移动数据不能直接连接家里的没有公网ip的设备了(想连接的话可以用内网穿透工具如frp)。
运行流程
正常流程:
- 由Windows端向所在局域网(LAN)广播UDP包,UDP payload包含PC端的IP、端口号、链接密钥(经过简单加密)。
- Android端监听UDP广播包,然后解密payload,验证密钥是否正确:若密钥正确,将IP和端口号填在app的对应输入框里,否则不予置理。
- Android的监测线程会每隔数秒自动尝试发起TCP连接(本文中暂且称之为“控制链路”),连接至由IP输入框和端口号输入框指定的主机。
- 连接成功后,安卓端监测线程停止,UDP监听线程停止。PC端会每隔一段时间通过“控制链路”向Android端发送一条"连接控制消息"(向Android端表明PC端还活着),Android收到后也会通过“控制链路”回应一条"连接控制消息"(向PC端表明Android端还活着)。
- 若双方在一个超时时间周期内没有收到对方发来的"连接控制消息",则认为对方因不可抗力已离线,主动关闭连接。Android端更新界面、监测线程会重新开始运行、UDP监听线程也会重新开始监听;PC端更新托盘Tooltips信息。(因不可抗力可能发生这样的情况:其中一方离线,但另一方还傻傻的保留了控制链路的socket,全然不知道发生了什么,以为对方还在)
- 发送文本:通过控制链路传输文本消息(理论上应该另开一条TCP连接较好)
- 发送文件:每当文件发送时都会新建一条TCP连接发送文件
一般流程(Android端无法接收Windows端发送的UDP报文):
- 查看PC端程序的托盘Tooltip(提示消息)上的IP和端口号
- 用户输入PC端的IP和端口
- 本步骤及以下同正常流程
- …
运行实例
主界面
- 连接密钥:是从安卓端的主界面获取的(作用是自动连接时验证是不是你的PC,如果手动输入IP和端口号的话可以忽略它
- 监听端口:指定PC在哪个端口监听(有点多余
- 开机自启:顾名思义
- 启动时隐藏此界面:不显示此界面,不过还有托盘(双击托盘恢复
- 文件保存路径:可以自定义保存文件的目录
PC端托盘菜单
- 发送文本:点击会自动发送剪贴板里的内容,Android端的剪切板上就会被设置上相同的内容
- 发送文件:点击后选择文件发送
- 关闭连接:当你发现PC端说连上了,Android端提示没连上就点一哈
- 重启服务:软件不好使的时候试试哦,有奇效(依据的是鸵鸟算法
- 显示主界面:显示的是设置界面
- 退出:非常放心的退出了
PC端托盘菜单的ToolTip
当你有多个网卡是有效的时,会显示多行IP:*** 端口:***
PC端更改文件储存位置
PC端打开文件储存文件夹
Android端未连接/正在连接界面
点击蓝色的小飞机会改变并提示当前状态
Android端已连接界面
此时点击关闭按钮会关闭连接
Android端接收到的文件
Android端处理接收到的文件
安卓端发送文件到PC端(选择其他应用打开/分享 → 选择Share On Lan)
在Android端选择文件然后用其他方式打开选择Share On Lan应用就可以发送了