udp - 使用 Stun 的服务器反射传输
问题描述
我正在尝试开发自己的 Lite-ICE 客户端。我能够得到 STUN 响应,它为我提供了我的服务器反射地址。我的问题涉及之后的步骤。
因此,我从 STUN 服务器接收到 IP1 和 Port1 作为我的服务器自反地址,该服务器分配给我的 STUN 客户端,本地地址为 L-IP1 和 L-Port1。
我了解如果 L-IP1 和 L-Port1 被多路复用以向/从远程服务器发送/接收非 STUN 消息,它是如何工作的。
如果我想要另一个应用程序,一个完全独立的进程来使用相同的绑定怎么办?那么,我也可以启动另一个应用程序来将 UDP 端口绑定到 L-Port1 吗?如果是这样,应用程序(STUN)和其他应用程序是否都会从远程服务器接收到目标设置为 IP1 和端口 1 的消息(从远程服务器的角度来看)?而那些不了解消息类型或方法的,干脆忽略它?正常情况下是这样吗?
解决方案
如果我想要另一个应用程序,一个完全独立的进程来使用相同的绑定怎么办?
您通常让每个应用程序获取其与不同本地端口的绑定。
那么,我也可以启动另一个应用程序来将 UDP 端口绑定到 L-Port1 吗?
如果另一个进程的套接字绑定到同一个本地端口,您将收到套接字绑定错误。有很多方法可以解决这个问题,但请继续阅读,这可能不是您想要的。
如果是这样,应用程序(STUN)和这个其他应用程序是否都会从远程服务器接收到目标设置为 IP1 和端口 1 的消息(从远程服务器的角度来看)?
您可以使用 SO_REUSEADDR 选项。但是,如果您有两个进程的套接字连接到同一个本地 UDP 端口,则该端口的传入数据包将被路由到任一套接字。(第一个调用 recvfrom 的人获取数据包 - 否则,它是不确定的)。
而那些不了解消息类型或方法的,干脆忽略它?正常情况下是这样吗?
不。
我认为您所说的是您在一个进程中执行 STUN,但希望使用这些绑定的实际应用程序在另一个进程中运行。只需让您的应用程序自己执行 STUN 绑定,然后简单地将套接字重新用于数据。如果您尝试在同一个套接字上多路复用 STUN 和应用程序数据,您将需要(您自己的)代码来区分它们。
推荐阅读
- ios - 在 WKWebView 中点击按钮后 UIButton 选择器不起作用
- emacs - 带有emacs org-mode的Haskell:变量不在范围内
- python - 按分位数对 Pandas 数据帧进行排名
- r - 在 R Studio 中自定义制图输出的困难
- c++ - 带有嵌套模板参数的 std::vector
- sharepoint - 如何在基于 SharePoint 的流中修复“拒绝访问 - 错误 403”
- tensorflow - 使用 macOS 安装 tfjs-node 时失败,并且 node-gyp 重建失败
- reactjs - React - 操作 DOM 还是使用状态?
- android - 离子时间选择无法显示 Android 的 AM / PM
- python - 如何在使用 plotly 进行子图绘制时隐藏 x 轴值