C#udpclient / udp socket - 在本地工作但不在全局地址上工作

时间:2010-12-02 21:07:55

标签: c# udp

我有一个非常讨厌的问题。我有一个mIRC / Skype应用程序,意思是有文字和语音的聊天室。文字&聊天室内容通过TCP完成,并且完美无缺,而UDP只将记录的数据转发给其他连接的客户端。

在我的家庭网络上的两个客户端之间,音频传输工作正常。但是对于全局客户端,服务器将不再接收来自他的数据包,或者他将从服务器接收数据包。

以下是一个例子:

当客户端使用udpclient时,服务器正在使用udp套接字,但结果是相同的,它也在本地工作..

server global ip:222.222.222.222 server local ip:192.168.2.3 服务器端口:9999

client global 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上发送/接收(对于客户端和服务器),这甚至不是必要的吗?我的意思是流量应该通过(就像使用职责一样的游戏),并且没有窗口防火墙没有活动,在这种情况下只有路由器。

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

我没有任何例外或任何事情,因此无法调试:(

可能是什么原因?考虑一下它在本地工作但不是全球工作;我确实同意这听起来像是防火墙问题,但正如我上面所描述的那样,我不知道这在我的场景中是如何适用的,我尝试了端口53和其他开放端口..

干杯:)

编辑:它有很多代码,但如果有必要,我可以在

中复制它

1 个答案:

答案 0 :(得分:2)

您不能将UDP广播到整个互联网(我假设这是'全球'的意思) - 它只能在发布广播的机器的子网内工作。这就是它在本地工作但不能与远程机器一起工作的原因。

您可能需要考虑使用IP多播:

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

那说你也可能有问题,因为有些路由器(你无法控制)不允许转发组播数据包。