基于WebRTC的局域网文件

基于WebRTC的局域网文件#

GitHub:FileTransfer

在前一段时间,我想在手机上向电脑发送文件,因为要发送的文件比较多,所以我想直接通过USB连到电脑上传输,等我将手机连到电脑上之后,我发现手机竟然无法被电脑识别,能够充电但是并不能传文件,因为我的电脑是Mac而手机是Android,所以无法识别设备这件事就变得合理了起来。那么接着我想用WeChat去传文件,但是一想到传文件之后我还需要手动将文件删掉否则会占用我两份手机存储并且传输还很慢,我就又开始在网上寻找其他软件,这时候我突然想起来了AirDrop也就是隔空投送,就想着有没有类似的软件可以用,然后我就找到了Snapdrop这个项目,我觉得这个项目很神奇,不需要登录就可以在局域网内发现设备并且传输文件,于是在好奇心的驱使下我也学习了一下,并且基于WebRTC/WebSocket实现了类似的文件传输方案,并且在实现的过程中解决了如下问题:

  1. 局域网内可以互相发现,不需要手动输入对方IP地址等信息。
  2. 多个设备中的任意两个设备之间可以相互传输文本消息与文件数据。
  3. 设备间的数据传输采用基于WebRTCP2P方案,无需服务器中转数据。
  4. 跨局域网传输且NAT穿越受限的情况下,基于WebSocket服务器中转传输。

通过这种方式,任何拥有浏览器的设备都有传输数据的可能,不需要借助数据线传输文件,也不会受限于Apple全家桶才能使用的隔空投送,并且在实现的过程中我还拓展了多文件发送、文本消息、尝试公网连接等能力,总结起来通过这种方式我们可以获得如下的收益:

  1. 天然的跨平台优势,常用的家庭PC或者移动设备通常都会拥有浏览器,所以我们可以轻松应用于常见的IOS/Android/Mac设备向PC台式设备传输文件的场景等等。
  2. 无视家庭路由器的AP隔离功能,即使因为各种原因比如合租时房东对路由器设备开启了AP隔离,我们的服务依旧可以正常交换数据,这样避免了在路由器不受我们控制的情况下通过WIFI传输文件的掣肘,但是这通常不适用于大型公司的对称型NAT,至于原因我们后边也会聊到。
  3. 公网的P2P数据交换,在现在IPv6的普及下,如果设备支持IPv6并且拥有公网IPv6地址的话,是可以直接进行数据传输的,点对点的数据交换不会受限于服务器的数据转发,并且隐私性会更高一些,当然因为国内网络环境的复杂性以及运营商对于UDP数据包的支持受限、IPv6地址只出不进等等限制,公网传输的实用性还是差一些的。

在耗费了两个周末的时间之后,将整个功能完善了出来 仿照AirDrop(隔空投送)优雅地在局域网中传输文件,并且可以尝试使用 在线DEMO,因为本身数据不会经由服务器转发,所以部署后大概占用20MB左右的内存,使用效果可以查看README视频

参考界面

 

 

出处:https://www.cnblogs.com/WindrunnerMax/p/18064781

posted on 2024-03-22 10:04  jack_Meng  阅读(11)  评论(0编辑  收藏  举报

导航