背景
笔者在Windows PC和iPhone上使用同步软件Resilio Sync时,发现“搜索LAN”功能无法正常使用,PC与iPhone不能自动互相发现。必须手动指定预定义主机才能实现发现和同步。
原因
Resilio Sync通过向UDP://239.192.0.0:3838
发送的组播和向全网发送的广播包实现LAN内自动发现功能。而苹果不允许iOS普通应用程序直接发送UDP广播或多播数据包(确切的说是需要向苹果申请,且需经过审查[来源]),因此也就无法实现自动发现了。
解决
通过Wireshark对3838端口抓包可知,PC版Rslsync似乎仅会在启动时发送用于LAN发现的数据包。(后来发现网卡信息变化也会触发,比如启用新网卡)
目前看来Rslsync的组播/广播接收功能运行正常。所以一个折衷方案是,在PC端需要与iOS设备LAN发现时重启一下PC端的Rslsync。(看起来多此一举,但实则毫无意义毕竟iOS端刚添加同步文件夹时如果LAN发现无法使用,那连预定义主机都设置不了……)
只能说无论是iOS还是Rslsync,设计得都挺抽象的。。