TcpListener:监听所有地址,包括GPRS IP地址。

16
我们有一段简单的传统软件需要通过TCP/IP在15001端口进行通信。我们需要在15001端口监听传统软件发送的请求并读取其内容。 我们已经在互联网上测试了此解决方案,结果良好。然而,如果我们在GPRS TCP/IP网络上测试相同的解决方案,则无法正常工作。 我们已经检查了所有基本内容,可以ping通GPRS网络中的其他设备,并且15001端口未被任何防火墙阻止。 那么,也许是我的TcpListener出了问题? 它的初始化方式如下:
tcpServer = new TcpListener(IPAddress.Any, TCP_PORT);

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

有人知道这两个网络之间可能的区别是什么吗?(尽管不应该有任何区别)如果需要更改TcpListener的内容,请告诉我。

1个回答

15

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

这篇帖子有更多关于获取每个网卡的IP地址的信息。

另外,如果你想同时监听所有IP地址,你需要为每个网卡创建一个TcpListener。


有趣的是,在Mono下编译/运行的测试代码,如果将IPAddress.Any传递给构造函数,它会开始侦听0.0.0.0。 - Andrew Y
使用IPAddress.Any与使用已弃用的TcpListener(int Port)构造函数是否类似? - Tim Coker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接