首页 > 其他分享 >基于WebRTC的局域网文件

基于WebRTC的局域网文件

时间:2024-03-22 10:12:17浏览次数:35  
标签:文件 基于 局域网 传输 公网 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

标签:文件,基于,局域网,传输,公网,WebRTC,设备
From: https://www.cnblogs.com/mq0036/p/18088829

相关文章

  • 基于GD32F303,CMSIS-DSP支持包,实现FFT,得到频率,还原单一频率的波形
        一般情况下M33M4的内核是支持DSP包的,用户只需要自己添加支持包,并添加相应的头文件即可,比如#include"arm_math.h",#include"arm_const_structs.h"等等。(1)main.c#include"gd32f30x.h"#include"stdio.h"#include"string.h"#include"arm_......
  • 基于security-oauth2-autoconfigure实现的OAuth2迁移到更现代的解决方案,Spring Securi
    目录OAuth2资源服务器配置步骤1:添加依赖步骤2:配置资源服务器OAuth2客户端配置(可选)/**其他应用作为OAuth2客户端步骤1:添加依赖步骤2:配置OAuth2.0客户端/**应用同时作为OAuth2客户端步骤1:配置OAuth2.0客户端控制器示例结合使用OAuth2与JWT        ......
  • 毕业设计课题:实验室课程管理系统,基于java+SSM+mysql
          一、前言介绍     如今互联网发展迅猛,大量的信息都是通过网络这一渠道来传播,所以利用网络渠道来传播知识是非常有前景的。线上管理系统的主要目的是对实验室课程信息进行更有效的管理,光靠现有的管理方式是远远不够的,因此开发实验室课程管理系统是有必要的......
  • 毕业设计课题:少儿编程管理系统,基于java+SSM+mysql
          一、前言介绍     21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发少儿编程管理系统意义和用处有哪些呢? ......
  • 数据分享|MATLAB、R基于Copula方法和k-means聚类的股票选择研究上证A股数据|附代码数
    全文链接:http://tecdat.cn/?p=31733最近我们被客户要求撰写关于Copula的研究报告,包括一些图形和统计输出。Copula方法是测度金融市场间尾部相关性比较有效的方法,而且可用于研究非正态、非线性以及尾部非对称等较复杂的相依特征关系因此,Copula方法开始逐渐代替多元GARCH模型的相......
  • 基于Springboot的瑜伽馆管理系统的设计与实现(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的瑜伽馆管理系统的设计与实现(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构......
  • 基于Springboot的闲置图书分享(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的闲置图书分享(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界......
  • 基于javaswing的学生信息管理系统
    (解析+源码)基于JAVASwing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储_学生信息管理系统实现增删改查-CSDN博客 Nosuitabledriverfoundforjdbc:mysql:建表之后登录报错 原因是没有mysql的jar包 在项目右键buildpath 选择configureBulidpath ......
  • 基于EP4CE6F17C8的FPGA单数码管秒计数实例
    一、电路模块本例的电路模块与“基于EP4CE6F17C8的FPGA数码管动态显示实例”中的完全一样,此处就不再给出了。二、实验代码本例实现1个数码管循环显示字符1~F,显示间隔为1秒,代码使用Verilog编写,采用例化的形式,共有三个文件。先编写数码管实现显示字形解码的程序,模块名称为seg_de......
  • 基于Spring Boot+Vue的学生选课系统
    末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发更多项目:CSDN主页YAML墨韵学如逆水行舟,不进则退。学习如赶路,不能慢一步。目录一、项目简二、开发技术与环境配置2.1SpringBoot框架2.2Java语言简介2.3Vue的介绍2.4mysql数据库介绍2.5B/S架......