rsw*_*ayz 11 network-programming mpc multipeer-connectivity ios9 ios10
我在iOS 10中的MPC应用程序中看到以下错误,我正在寻找一些解释它们的帮助.连接对等体后,会弹出以下几个错误.对等端最终连接,但它比iOS 9慢(看起来导致错误消息的事件发生在主线程上).在iOS <10上运行时,这些错误不会出现在应用程序中.
[ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041).
Not in connected state, so giving up for participant [47CD8292] on channel [0].
Run Code Online (Sandbox Code Playgroud)
任何投入将不胜感激!
Ton*_*ony 14
错误的原因和意义
为了解释错误的原因和含义,我们必须从NAT开始(如果您熟悉它,可以跳过这一部分).
NAT是一种为同一本地网络中的多个设备映射相同"全局"IP地址的方法,即多个设备共享相同的地址(可能在不同的时间,可能使用不同的端口 - NAPT),这样我们就可以节省很多'全球'地址,缓解了ipv4地址的耗尽.也正因为如此,设备的本地地址只能在局域网中使用,而不能在外部使用.想要发送到外部的数据报将通过NAT设备(总是路由器),它将把报头中的地址修改为全局地址.还有一点是不同LAN中的设备可能使用相同的IP地址.
|
| /------------ 'Global'
X1':x1'|/ Address
+------------+
| NAT |
+------------+
|
| /------------ Local
X:x |/ Address
+--------+
| |
| Agent |
| |
+--------+
Run Code Online (Sandbox Code Playgroud)
现在,我们希望直接进行对等通信,因此我们必须知道对等方的地址.但正如我们所知,NAT的使用使设备的地址只是一个本地地址,无法在Internet外部使用,也无法使用它进行通信.ICE的目的是发现对等体应该使用哪个地址与其他对等体直接通信.
它收集候选人的第一阶段地址:
为了获得公共端地址,设备将向公共服务器(称为STUN服务器,LAN外)发送"绑定请求",并将服务器发送回称为"绑定响应"的地址.
当设备具有其拥有的地址时,它们将通过信令信道发送给其他对等体.当peer(我们称之为'R')从我们的设备接收地址列表(我们称之为'L')时,R将收集自己的地址并响应自己的列表.在此过程结束时,它会导致候选对.要查看哪些对有效,每个代理都会使用"绑定请求"和"绑定响应"来安排一系列CHECKS.
L R
- -
STUN request -> \ L's
<- STUN response / check
<- STUN request \ R's
STUN response -> / check
Run Code Online (Sandbox Code Playgroud)
总之,可能的原因还有更多细节:
建议:
参考:
| 归档时间: |
|
| 查看次数: |
3079 次 |
| 最近记录: |