【发布时间】:2021-12-15 00:44:06
【问题描述】:
我正在尝试在本地客户端和 Azure VM(标准 B1s Windows Server 2016 数据中心)之间建立 TCP 连接。
在 VM 上,我正在运行一个简单的 TCP 服务器(参见下面的代码),它侦听自定义端口 9000。 网络接口有一个我正在尝试使用的公共 IP。
var listener = new TcpListener(IPAddress.Any, 9000);
listener.AllowNatTraversal(true);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client connected: " + client.Client.RemoteEndPoint);
我在门户上的任何端口 9000 上添加了入站端口规则(source=any,source port=*,destination=any,dest.port=9000,protocol=any,action =允许)。
我在本地使用一个简单的 TCP 客户端。 TCP 客户端成功连接到端口 80。但是,连接到9000端口并不成功。
我使用“数据包捕获”来查看客户端请求是否到达 VM。是的。
1 0.000000 XX.XXX.XXX.XXX 10.1.1.4 TCP 66 29678 → 9000 [SYN] Seq=0 Win=64240 Len=0 MSS=1400 WS=256 SACK_PERM=1
2 2.998954 XX.XXX.XXX.XXX 10.1.1.4 TCP 66 [TCP Retransmission] 29678 → 9000 [SYN] Seq=0 Win=64240 Len=0 MSS=1400 WS=256 SACK_PERM=1
3 9.000180 XX.XXX.XXX.XXX 10.1.1.4 TCP 66 [TCP Retransmission] 29678 → 9000 [SYN] Seq=0 Win=64240 Len=0 MSS=1400 WS=256 SACK_PERM=1
我在 VM 中使用“netstat”命令来检查我的 TCP 侦听器是否正常工作。是的。
Proto Local Address Foreign Address State
TCP 0.0.0.0:80 VMmurat2:0 LISTENING
TCP 0.0.0.0:135 VMmurat2:0 LISTENING
TCP 0.0.0.0:9000 VMmurat2:0 LISTENING
有什么想法吗?
【问题讨论】:
-
你打开vm里面的防火墙(Os级别)端口了吗?
-
你是对的。我在操作系统级别(具有高级安全性的 Windows 防火墙 - 入站规则)打开了端口(TCP 9000)。有效。谢谢。
-
还有一个注意事项:我不知道为什么,“允许应用程序...”不起作用。我需要使用高级防火墙设置并为 TCP 端口添加规则。
标签: c# azure tcp azure-virtual-machine tcplistener