2009-02-03 59 views
7

我们有一个简单的传统软件,我们需要通过端口15001与 使用TCP/IP进行通信。我们需要监听端口15001 ,建立连接,然后阅读它发送给我们的任何内容。TcpListener:监听每个地址,包括GPRS IP地址

我们已经在互联网上测试了这个解决方案,它工作得很好。 但是,如果我们通过GPRS TCP/IP网络测试相同的解决方案,它不会。

所有的基础知识都已经过检查,我们可以ping其他设备在GPRS网络 和端口15001不被任何防火墙阻止。

所以也许我的TcpListener有问题?

它被初始化这样的:

tcpServer = new TcpListener(IPAddress.Any, TCP_PORT); 

我假设它监听每个可用的IPv4启用接口的系统上, 因为我用IPAddress.Any?

有没有人知道这两个网络之间会有什么不同? (即使不应该有任何区别),如果有什么我需要改变我的TcpListener?

回答

9

您需要指定要侦听的IP地址,而不是IPAddress.Any。请参阅here。当你使用IPAddress.Any时,它会自动为你选择网络接口。要听某个接口(在你的情况下,GPRS),你必须在构造函数中使用正确的IP。

This post有关获取每个nic的IP地址的更多信息。另外,如果您希望一次收听每个IP地址,则需要为每个网络添加一个TcpListener。

+0

有趣的是,在Mono下编译/运行的测试代码,如果将IPAddress.Any传递给构造函数,它会在0.0.0.0上开始监听。 – 2009-07-21 00:45:40