我正在尝试在本地客户端和运行Windows 2K16的Azure VM(Standard D1 v2)之间建立TCP连接。
在VM上,我正在运行一个接收端口的简单TCP服务器(请参阅下面的代码)。我在参数中传递了端口51515。
网络接口有一个我正在尝试使用的公共IP。
我在门户网站上的TCP端口51515上添加了入站端口规则(source = any,source port = *,destination = any,dest.port = 51515,protocol = TCP,action = allow)。
虚拟机上的Windows防火墙已关闭(公共,域和私有)。
我使用公共IP和51515端口从本地端使用Telnet。无法在那里打开连接消息。
我尝试访问虚拟机上的IIS,并且可以使用其他入站规则从内部访问它。
有什么想法吗?
谢谢,
汤姆
class Program
{
static void Main(string[] args)
{
try
{
var server = new TcpListener(new IPEndPoint(IPAddress.Loopback, int.Parse(args[0])));
server.AllowNatTraversal(true);
server.Start();
server.AcceptTcpClientAsync().ContinueWith(c => System.Console.WriteLine("Client connected from:" + c.Result.Client.RemoteEndPoint));
System.Console.WriteLine("server listens... press any key to exit");
System.Console.ReadKey();
}
catch (Exception e)
{
System.Console.WriteLine(e);
System.Console.WriteLine("press any key to exit");
System.Console.ReadKey();
}
}
}
答案 0 :(得分:1)
它不仅可以侦听特定端口,还可以侦听特定地址。你不希望这样。您将服务器套接字绑定到IPAddress.Loopback
,即127.0.0.1,这意味着它将不接受来自其本地主机外部的任何连接。
将其绑定到0.0.0.0。
答案 1 :(得分:0)
正如EJP所说,IPAddress.Loopback
表示127.0.0.1
,该服务只能访问VM内部。
您需要0.0.0.0
上的绑定端口或VM的私有IP。如下所示:
var server = new TcpListener(new IPEndPoint(IPAddress.Any, int.Parse(args[0])));