【问题标题】:C# udpclient/udp socket -- working locally but not on global addressesC# udpclient/udp 套接字——在本地工作,但不在全局地址上
【发布时间】:2010-12-02 21:07:55
【问题描述】:

我有一个非常烦人的问题。我有一个 mIRC/Skype 应用程序,即带有文本和语音的聊天室。文本和聊天室内容通过 TCP 并完美运行,而 UDP 仅将记录的数据中继到其他连接的客户端。

在我的家庭网络上的两个客户端之间,音频传输工作正常。但是针对全局客户端,服务器既不会从他那里接收数据包,也不会从服务器接收数据包。

这是一个例子:

服务器使用 udp 套接字,而客户端使用 udpclient,但结果是一样的,并且在本地也可以工作。..

服务器全局ip:222.222.222.222 服务器本地ip:192.168.2.3 服务器端口:9999

客户端全局ip:111.111.111.111 客户端本地ip:192.168.0.100 客户端端口:8888

服务器 *将其套接字绑定到 192.168.2.3 : 9999 *从 111.111.111.111 接收:8888 *发送到 111.111.111.111.111 : 8888

客户 *将其套接字绑定到 192.168.0.100 *从 222.222.222.222 接收:9999 *发送到 222.222.222.222 : 9999

...你明白我的意思。我不知道为什么数据没有通过。我已经尝试在端口 53 上发送/接收(对于客户端和服务器),这甚至没有必要对吗?我的意思是无论如何流量都应该通过(就像使命召唤之类的游戏一样)并且没有 Windows 防火墙处于活动状态,在这种情况下只有路由器。

客户端/服务器互相使用connect(),而不是receiveFrom/sendTo。我也尝试过使用它,但没有区别。

我没有得到任何异常或任何东西,因此无法调试:(

可能是什么原因?考虑一下它在本地而非全球范围内有效的事实;我同意这听起来确实像防火墙问题,但正如我上面所描述的,我看不出这在我的场景中是如何适用的,我尝试了端口 53 和其他开放端口..

干杯:)

编辑:它的代码相当多,但如果有必要我可以复制它

【问题讨论】:

    标签: c# udp


    【解决方案1】:

    您不能将 UDP 广播到整个互联网(我假设这就是您所说的“全局”)——它只能在发出广播的机器的子网内工作。这就是为什么它可以在本地工作但不能在远程机器上工作的原因。

    您可能要考虑改用 IP 多播:

    http://en.wikipedia.org/wiki/IP_Multicast

    也就是说您可能也有问题,因为某些路由器(您无法控制)不允许转发多播数据包。

    【讨论】:

    • 您没有看到异常的原因是 UDP 是一劳永逸的。发行者像在本地设置中一样发送广播,没有问题,问题是接收者无法接收广播。
    • 全局,我的意思是通过互联网的客户端,而不是仅仅通过本地网络:p 例如通过本地网络,我只使用本地 IP 而不是全局 IP 进行连接。 (全局可能是一个坏词)组播只是通过在必要的网关上复制数据包来发送到几台计算机,对吗?我只是想先尝试建立一对一的连接
    • 如果只是一对一连接,您需要尝试使用标准套接字/远程处理/wcf,而不是使用广播协议。
    • 我正在使用 UDP 套接字发送/接收,如果这就是你的意思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多