自制工具 | 局域网文本、文件传输与共享,跨设备剪切板(预览版)

本文将介绍一款自制文本和文件传输工具,可实现局域网内文本/文件传输与共享。支持传输文本,可一键复制、粘贴,文本字数无限制,以缩略形式展示。支持传输文件,文件大小无限制。工作在局域网,含操作校验,安全可靠。

编写传输工具的初衷

在平时的学习或者工作过程中,或多或少会碰到如下场景:

  1. 在 A 设备复制的一段文字想发送到 B 设备上;
  2. 在 A 设备接收的一个文件想发送到 B 设备上。

诚然,现有的通讯软件/传输软件足以满足上述需求,但,仅针对上述两个需求而言,有些大材小用且不够方便。

  1. 临时性:无论是文本还是文件,在 B 设备接收后,记录便无需保留。因此,希望记录能够过期自动删除。
  2. 可折叠:主要针对文本,当 A 设备发送一大段文字时,B 设备只需能否获取到全部内容就行,而不需要预览或者说不关心全部内容,记录展示的信息能够区分不同记录足矣。屏幕空间有限,应在有限的屏幕内展示尽可能多的记录,直接展示全部内容反而影响查找其他记录。因此,记录应该是缩略的或者可折叠的。
  3. 免登录:为了发送一段字数不多的文字或者一个体积不大的一段文件而登录某软件通常是不值得的,麻烦且浪费时间。
  4. 体积限制:主要针对文件,通常,通讯软件对于待发送文件的大小是有限制的。
  5. 便捷简单:仅为上述两个场景而下载特定软件或者登录特定软件是不值得的。

基于上述场景和需求,就自己编写了一个文本/文件传输工具。

  • 支持传输文本,可一键复制、粘贴,文本字数无限制,以缩略形式展示;
  • 支持传输文件,文件大小无限制;
  • 工作在局域网,含操作校验,安全可靠;
  • 可自定义配置,如记录过期时间、文件大小限制;
  • 传输工具运行在 Windows/MacOS,处于同一局域网的设备(电脑、手机、平板等)可通过浏览器访问。
  • 快速启动与关闭,简单易用。

传输工具的使用

准备工作

如对正式版描述中的个别名词有些许疑惑,可跳转至简易版。以下正式和简易仅形容使用方式,而不是传输工具本身。

正式版:保证需要访问服务的设备与启动服务的设备处于同一局域网。注意,不要求所有设备处于同一局域网,这意味着可以跨局域网传输文件。

简易版:将需要访问服务的设备(包括启动 clipboard.exe 的设备)连接到同一个 WIFI,或者,其中一个设备开热点,其他设备都连接到这个热点。

启动与停止

对于 Windows 用户,可按文末所给方式获取到传输工具 clipboard.exe。分为 https 版和 http 版,http 版无一键粘贴功能。

对于 MacOS 用户,由于本人并无 MacOS 电脑,不方便调试,故未提供 MacOS 版,若您愿意配合调试,可在评论区留言。

在电脑上新建一个目录,不妨命名为 clipboard,将 clipboard.exe 移动到 clipboard 目录。

双击 clipboard.exe,服务便会启动并会自动打开 CMD 窗口,并列出访问地址,如下图所示。程序启动后,会在 clipboard.exe 同一目录下自动生成一个 data 目录,其中的文件和目录在程序运行时请勿修改,以防程序崩溃,尽管程序带有一定自恢复功能。

在这里插入图片描述

图1 CMD 窗口

如果想关闭服务,点击 CMD 窗口右上角的 × 或者按 Ctrl + C 即可。

访问与使用

对于本机(指启动 clipboard.exe 的设备),访问列出的任意一个地址即可。按住 Ctrl 键,鼠标左键单击地址可快速访问。

对于其他设备:

  • 正式版:应访问与当前设备处于同一局域网的网卡对应的地址。地址前面的实际是相应的网卡名称。
  • 简易版:访问 WLAN 对应的地址。

若使用 https 版,访问地址,应该会出现警告,这是因为自行签发的 TLS 证书不被浏览器信任,属正常现象,具体细节见后文 ⌈传输工具的实现⌋ 的 ⌈HTTPS⌋ 部分。

电脑端警告如下图所示。

在这里插入图片描述

图2 电脑端首次访问时的警告

移动端警告如下图所示。

在这里插入图片描述

图3 移动端首次访问时的警告

电脑端可点击 ⌈高级⌋,继续访问。移动端可点击 ⌈继续浏览⌋。

https 版启动后,CMD 会出现如下报错,属正常现象,不影响使用。

http: TLS handshake error from xxx: remote error: tls: unknown certificate

若觉得警告和报错不妥,可采用 http 版,http 版无此警告和报错,但 http 版无一键粘贴功能,根据自身需求选择。

在访问服务前,需要先输入校验码继续进行校验,以防处于局域网的其他人未经允许便使用服务,校验码默认为 zijie1024。

在这里插入图片描述

图4 校验码

校验通过会自动跳转到如下图所示页面,下图所示页面包含本工具的所有内容。页面右下角有“回到顶部”的按钮,当页面列表项较多时,可点击该按钮快速回到顶部。

在这里插入图片描述

图5 传输工具主体功能

由于本传输工具并无复杂的操作逻辑,故对于具体的使用不作介绍,见名知义。

自定义配置

以下列出了本传输工具的部分配置,目前暂不能自定义,均采用默认配置。

相关目录和文件:

  • data:存放程序运行所产生的所有数据。
  • data/record:存放记录的文件。
  • data/file:存放已上传的所有文件。
  • data/work:存放临时文件,包括但不限于文件分片。

校验码:默认为 zijie1024。

记录过期时间:默认为 24 小时。

服务启动的端口:默认为 8080。

文件大小限制:默认无限制。

文本消息字数:默认无限制。

文件分片大小:默认为 10MB。

传输工具的实现

如果对本传输工具是如何实现的感兴趣或者想编写一个类似功能的工具,可参考本部分内容。忽略本部分内容不影响使用。由于是预览版,本文仅对实现作简要阐述,如需详细的实现过程,可在评论区留言,待正式版完成后,视需求情况更新。

项目架构

本传输工具是一个基于 B/S 架构的 Web 项目,前端使用传统的 HTML、CSS、JS 实现,后端可采用 Java、Go、JS(NodeJS)等语言搭建服务处理请求。

文件传输

采用分片上传,支持断点续传、秒传。

前端:计算文件 hash、分片上传文件。文件 hash 的计算较为耗时,可采用多线程完成(Web Workers)。出于减轻服务器压力、避免浏览器卡顿等考虑,可手动限制并发请求数量。对于 HTTP/1.1,浏览器对并发请求的数量限制通常为6 个,HTTP/2 和 HTTP/3 支持多路复用,消除了传统意义上的并发请求数量限制,但,手动限制并发请求数量仍是有益的。

后端:暂存上传的分片、合并分片。将上传的分片暂存到临时目录,待全部分片上传完毕后,按照约定顺序将分片合并。

断点续传、秒传:计算完文件 hash 后,先发送请求询问服务器哪些分片已上传,然后仅上传未上传的分片(断点续传)。当文件已上传时,无未上传的分片,可做到秒传。

同步显示

当一个设备发送文本/文件完毕后,希望其他设备能够及时显示记录,有两种可选方案:

  • 客户端拉取:客户端定时向服务端发送请求拉取数据(短轮询)。
  • 服务端推送:服务端收到新的数据后,主动将数据推送给客户端。

对于客户端拉取,实现简单,服务端每当收到数据请求,便将最新的数据响应给客户端,但是,无论数据是否有更改都会发送请求,每次请求都会返回全部数据,可能会造成不必要的浪费。

对于服务端推送,实现更为复杂,但是,服务端可以实时且细粒度地将数据的修改推送给客户端。服务端推送可采用 WebSocket 实现,WebSocket 是一种全双工通信协议,通过建立持久连接,双方可实时进行数据传输。

本传输工具采用 WebSocket 来实现各设备同步显示。由于某些原因,WS 连接可能会意外断开,为保证连接的稳定性与可靠性,引入心跳检测机制,使用 WebScoket 定时向服务端发送心跳数据包,若发送失败或者服务端无响应,则进行重连操作,为避免无限重连,可设置重连次数限制。

HTTPS

本传输工具提供粘贴功能,粘贴功能可通过如下方式实现:

// 方式一(已弃用)
document.execCommand('paste')
// 方式二
navigator.clipboard.readText()

粘贴功能需要读取剪切板,涉及用户隐私,目前仅在安全上下文(HTTPS)中可用。所以,为了实现粘贴功能,需要采用 HTTPS。开启 HTTPS 需要两个文件:key 和 crt,key 是密钥,crt 是 TLS 证书。

TLS 证书可分为两类。一类是向权威机构申请的 TLS 证书,这类证书会被浏览器信任。一类是自签名的 TLS 证书,这类证书不被浏览器信任,会弹出警告,如前文所示。权威机构的 TLS 证书通常是收费的,且通常不支持通过 IP地址申请。对于一个简单的本地服务而言,使用自签名的 TLS 证书足矣,尽管浏览器会提示不安全。自签名证书可用 OpenSSL 生成。

对于本传输工具而言,如果不实现粘贴功能的话,完全可以使用 HTTP。

身份校验

由于处于同一局域网的设备均可以访问本传输工具启动的服务,所以,有必要加一层身份校验。本传输工具采用 JWT 进行身份校验。客户端输入校验码,后端对校验码进行校验,校验通过则返回 Token,此后客户端的每次请求都必须携带该 Token,后端会对 Token 进行校验。

传输工具的展望

所谓展望,就是,因为这样或那样的原因,暂不准备实现的功能。如果您对其中某些功能有需求或者有其他功能有需求,可在评论区留言,会根据各位的需求按期望程度逐个实现。

自定义配置

将程序的某些设置抽取出来,可在配置文件中进行配置,比如文件过期时间、文件上传大小限制等。

设备直传

显示所有已连接的设备,可直接选择任意一台设备并向其传输文件,省去文件上传完成后手动点击下载的操作。

房间隔离

可创建房间并设置房间密码,加入房间需验证密码。在房间内发送的文本/文件仅加入房间的设备可见。

END

以上就是本文的全部内容,由于是预览版,功能尚不完善,如在使用过程中遇到任何问题,欢迎留言,如您有相应解决方案,欢迎一并提出。

如果觉得本文对您有一点点帮助,欢迎点赞、转发加关注,这会对我有非常大的帮助,如果有任何问题,欢迎在评论区留言,咱们下期见!

文章文档:公众号 字节幺零二四 回复关键字即可获取本文最新内容(含附件),关键字放在公众号的本文中。

视频地址:https://www.bilibili.com/video/BV1pGtUeTEfn

在这里插入图片描述

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

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

相关文章

买家账号被feng?探讨亚马逊、Lazada和速卖通的解决方案

账号登录的安全注意事项 当亚马逊买家账号在多个手机或电脑上进行登录时,这些设备的独特硬件网络参数,如设备型号、地区码、监管码、主板码、WIFI地址等,均会被亚马逊系统读取并记录。特别是在风控加强期间,平台会深入分析这些参…

MemFire Cloud,让Coding更丝滑

作为一个开发者,每天与代码打交道的你,是否总觉得开发流程太繁琐?后端搭建复杂,接口设计麻烦,甚至连数据库配置都让你心烦不已。别担心,今天要给你推荐一个真正能让开发变得丝滑的工具——MemFire Cloud。如…

【Python数据分析】pandas apply自定义函数+分组操作+分析案例

文章目录 1.apply()1.1函数 操作series对象1.2 apply()函数 > 操作DataFrame对象1.3 向量化函数1.4 apply()函数的案例-泰坦尼克号数据集1.5 apply()函数 结合 lambda表达式使用. 2. 分组操作2.1 分组 聚合操作2.2 分组 转换2.3 分组 过滤2.4 DataFrameGroupby df的分组对…

Java面试题大全(全网最全,持续更新)中级(2)

1. 集合与泛型 1.1. 什么是泛型?泛型的优势是什么? 泛型允许类、接口和方法在定义时不指定具体的类型,在使用时再指定类型。优势: 提高代码复用性。提供类型安全,避免强制类型转换带来的 ClassCastException。 pub…

word批量裁剪图片,并调整图片大小,不锁定纵横比

在word中有若干图片待处理,裁剪出指定内容,调整成指定大小。如下是待处理的图片: 这时,选择视图,选择宏,查看宏 选择创建宏 添加cut_picture代码如下,其中上、下、左、右裁剪的橡塑尺寸根据自己…

李飞飞创业公司World Labs:引领AI新方向的“大世界模型”

引言 随着人工智能的不断进步,AI领域涌现了许多新兴技术和研究方向。在这其中,李飞飞创办的World Labs凭借其独特的“空间智能”和“大世界模型”(Large World Model, LWM)理念,迅速成为焦点。尤其是在获得了2.3亿美元…

系统架构设计师教程 第10章 10.5 软件架构演化评估方法笔记

10.5 软件架构演化评估方法 ★★★☆☆ 10.5.1 演化过程已知的评估 目的在于通过对架构演化过程进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化,对该演化过程中相关质量属性进行评估。 1.评估流程 架构演化评估的基本思路是将架…

IDEA快速查看类中有那些方法的快捷键

IDEA快速查看类中有那些方法的快捷键 1.显示类结构弹出窗口 你可以使用以下快捷键来快速查看当前类的方法和成员: Windows/Linux: Ctrl F12 macOS: Option F12 或 ⌥ F12 这会打开一个弹出窗口,显示当前类的结构,包括方法、字段、构造函…

派可数据:解锁数据潜力,驱动业务价值新增长

前 言 当前,企业数字化转型经过初始探索阶段,各行各业进入高速发展百花齐放的创新应用新阶段。创新应用阶段的核心是企业应用先进的数字技术和工具,对企业多年在全领域积累的各类数据,包括财务、业务、生产、设计、设备、工艺等结…

车载应用的多功能需求与公安、金融等行业的应用特点

随着科技的快速发展,车载应用的功能需求也日益多样化。除了基本的视频监控功能外,现代车载应用还需满足一系列高级功能,如无线网络视频监控、GPS卫星定位、车辆调度、语音报站、行驶信息记录以及多媒体娱乐广告播放等。这些功能在公安、金融等…

Vue 实战教程:从 0 到 1 手把手打造新手友好的聊天应用,附完整开源代码,快速上手前端开发!(包含发送消息、发送表情包、发送文件、下载文件、截图等功能)

b站视频演示效果&#xff1a; 效果图&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8" /><title>简单聊天功能示例</title><!-- 引入 Vue.js&#xff08;通过 …

深度优先搜索算法及其matlab程序详解

#################本文为学习《图论算法及其MATLAB实现》的学习笔记################# 深度优先搜索算法(DepthFirst Search),简记DFS算法,是图论中的首要算法,其思想方法渗透到图论中的许多算法之中,尤其是DFS算法在求生成树、割点、块和平面图嵌入算法中起着极为关键的作用。…

开源ids snort (windows版)

Snort-IPS-on-Windows-main资源-CSDN文库 GitHub - eldoktor1/Snort-IPS-on-Windows: A comprehensive guide to installing and configuring Snort IPS on Windows, ensuring robust network security 解压后安装 npcap-1.75.exe Snort_2_9_20_Installer.x64.exe 安装后cm…

MiniMind环境搭建训练推理测试

引子 写了那么多篇大模型环境搭建推理部署的blog&#xff0c;如果没记错有几篇就是因为GPU资源hold不住&#xff0c;没有无法得到最终结果的&#xff08;智谱AI GLM-4V-9B视觉大模型环境搭建&推理-CSDN博客&#xff09;。我个人一直觉得大模型发展最终还是要走向端侧&…

8591 计算next值

### 思路 1. **录入字符串**&#xff1a;读取用户输入的字符串个数 n&#xff0c;然后逐个读取每个字符串。 2. **计算NEXT值**&#xff1a;对于每个字符串&#xff0c;计算其NEXT数组。 3. **输出NEXT值**&#xff1a;输出每个字符串对应的NEXT数组。 ### 伪代码 function g…

DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

环境部署-环境变量

环境部署-环境变量 1、python设置查找环境变量2、linux设置设置查找环境变量 仅个人笔记使用&#xff0c;感谢点赞关注 1、python设置查找环境变量 python设置环境变量 import os os.environ["PYTHONPATH"] "/path/to/library"python获取环境变量 MYS…

AI时代最好的编程语言应该选择谁?

在AI的时代&#xff0c;编程语言的选择对就业机会和薪资水平有着至关重要的影响。C和Python被认为是两个极端的代表语言&#xff0c;分别适用于不同的技术需求和开发场景。然而&#xff0c;选择最有价值的编程语言&#xff0c;不仅要考虑其技术特性&#xff0c;还需要综合考虑行…

【数据结构】你真的了解哈希表吗?看完你会对数据结构——哈希表, 会有更深更全面的认识 (理论篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

实例讲解电动汽车VCU故障分类、故障码发送策略及Simulink建模方法

汽车作为一个上万零部件组成的工业品&#xff0c;从设计研发到试制调试再到路试可靠性测试再到车辆批量生产&#xff0c;要经历一个相当长的周期。在设计研发阶段&#xff0c;从设计方案与原理上尽量减少故障出现的可能&#xff0c;在试制调试阶段&#xff0c;通过全面的调试测…