【问题标题】:Getting UdpClient from a connected TcpClient?从连接的 TcpClient 获取 UdpClient?
【发布时间】:2014-08-12 20:53:00
【问题描述】:

我正在尝试在建立 Tcp 连接后设置 Udp 连接。所有的连接状态和控制都通过 Tcp,但我希望客户端和服务器也能够通过 Udp 进行通信。这是我的问题。

服务器将有许多客户端在不同的线程上连接到它。我让它 %100 工作正常,只绑定了 Tcp,但我想使用 Udp。由于Udp Hole Punching,我很难在 Udp 上侦听特定端点,因为在与 NAT 设备通信时端点可能会发生变化。

所以,简单地说:如何轻松地获得从 TcpClient 连接到引用的“UdpClient”连接?

提前谢谢你!

【问题讨论】:

  • 只是让你知道如果你混合使用 TCP 和 UDP 通信,特别是对于同一个客户端,你会增加 UDP 遭受丢包的机会

标签: c# sockets tcp udp tcpclient


【解决方案1】:

不会有 UDP 隧道,只是因为你有一个成功的 TCP 连接。 您必须以与 TCP 连接相同的方式建立 UDP 连接。例如。如果 TCP 连接是从实习生到外部建立的,你必须对 UDP 做同样的事情,否则 NAT 设备将不会为 UDP 连接建立连接,因此来自对等方的数据包不会发送给你。

【讨论】:

  • 所以由于 Udp 是无连接的,我不能只通过 listener.AcceptClient() 获取 UdpClient。有没有办法模拟这个呢?它可以侦听来自未处理端点的任何新数据包,而不是仅通过地址进行侦听,以将其转换为新的 UdpClient?
  • @Dafeesh:UDP 的基本原理是绑定到一个地址并接收所有以该地址为目标的数据包。您还可以“连接”此套接字,以便它仅从连接的 ip:port 获取数据包。但我相信你会找到足够多的关于如何编写 UDP 客户端和服务器的示例。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2015-03-27
  • 1970-01-01
相关资源
最近更新 更多