首页 > 解决方案 > 使用 Stun 的服务器反射传输

问题描述

我正在尝试开发自己的 Lite-ICE 客户端。我能够得到 STUN 响应,它为我提供了我的服务器反射地址。我的问题涉及之后的步骤。

因此,我从 STUN 服务器接收到 IP1 和 Port1 作为我的服务器自反地址,该服务器分配给我的 STUN 客户端,本地地址为 L-IP1 和 L-Port1。

我了解如果 L-IP1 和 L-Port1 被多路复用以向/从远程服务器发送/接收非 STUN 消息,它是如何工作的。

如果我想要另一个应用程序,一个完全独立的进程来使用相同的绑定怎么办?那么,我也可以启动另一个应用程序来将 UDP 端口绑定到 L-Port1 吗?如果是这样,应用程序(STUN)和其他应用程序是否都会从远程服务器接收到目标设置为 IP1 和端口 1 的消息(从远程服务器的角度来看)?而那些不了解消息类型或方法的,干脆忽略它?正常情况下是这样吗?

标签: udpwebrtcudpclientstun

解决方案


如果我想要另一个应用程序,一个完全独立的进程来使用相同的绑定怎么办?

您通常让每个应用程序获取其与不同本地端口的绑定。

那么,我也可以启动另一个应用程序来将 UDP 端口绑定到 L-Port1 吗?

如果另一个进程的套接字绑定到同一个本地端口,您将收到套接字绑定错误。有很多方法可以解决这个问题,但请继续阅读,这可能不是您想要的。

如果是这样,应用程序(STUN)和这个其他应用程序是否都会从远程服务器接收到目标设置为 IP1 和端口 1 的消息(从远程服务器的角度来看)?

您可以使用 SO_REUSEADDR 选项。但是,如果您有两个进程的套接字连接到同一个本地 UDP 端口,则该端口的传入数据包将被路由到任一套接字。(第一个调用 recvfrom 的人获取数据包 - 否则,它是不确定的)。

而那些不了解消息类型或方法的,干脆忽略它?正常情况下是这样吗?

不。

我认为您所说的是您在一个进程中执行 STUN,但希望使用这些绑定的实际应用程序在另一个进程中运行。只需让您的应用程序自己执行 STUN 绑定,然后简单地将套接字重新用于数据。如果您尝试在同一个套接字上多路复用 STUN 和应用程序数据,您将需要(您自己的)代码来区分它们。


推荐阅读