C# 服务器2016中的端口按顺序打开,而不是请求的端口

C# 服务器2016中的端口按顺序打开,而不是请求的端口,c#,windows,networking,windows-server-2016,C#,Windows,Networking,Windows Server 2016,所以,我以前从未见过这样的事情。我工作的公司遇到了一个问题,一个特定的软件没有打开它的端口,因此经过一些调查,我们确定它似乎只是打开了一些任意端口,而不是请求的端口。起初我认为这是软件,所以我编写了一个小程序,只需打开一个端口: server = new TcpListener(localAddr,Convert.ToInt32("81")); server.Start(); 无论我在那里输入哪个端口,它都会打开另一个端口。在这个特定的实例中,我运行程序要求它打开81。开放时间是2313 TC

所以,我以前从未见过这样的事情。我工作的公司遇到了一个问题,一个特定的软件没有打开它的端口,因此经过一些调查,我们确定它似乎只是打开了一些任意端口,而不是请求的端口。起初我认为这是软件,所以我编写了一个小程序,只需打开一个端口:

server = new TcpListener(localAddr,Convert.ToInt32("81"));
server.Start();
无论我在那里输入哪个端口,它都会打开另一个端口。在这个特定的实例中,我运行程序要求它打开81。开放时间是2313

TCP 10.2.0.30:2313 0.0.0.0:0监听9468

如果我一直点击打开;由于端口正在使用,在第一次之后确实会失败,它将继续按顺序打开端口

U:\>netstat -aon | find /i "9468"
  TCP    10.2.0.30:2313         0.0.0.0:0              LISTENING       9468
  TCP    10.2.0.30:2314         0.0.0.0:0              LISTENING       9468
  TCP    10.2.0.30:2315         0.0.0.0:0              LISTENING       9468
  TCP    10.2.0.30:2316         0.0.0.0:0              LISTENING       9468

代码中没有任何内容告诉它这样做,一定是Windows Server 2016中的某个地方导致了这种情况。虽然我不知道为什么或者在哪里。我很感激你能给我的任何帮助

1)不确定为什么要将字符串“81”转换为int,而不只是使用int-literal 81。2) 你试过在另一台计算机上运行它吗,比如你的dev box,看看它是否有相同的行为?端口号是一个16位无符号整数,而不是32位整数。实际上,您正在传递16位的
0
(32位整数的前16位),因此它正在选择一个端口号,就像您将端口号设置为
0
一样。此外,您是否尝试过指定大于1024的端口号?我认为从1024到1024的端口号都需要特殊权限。@RonMaupin 1)如果你看,它接受32位有符号的端口号,2)如果在转换过程中删掉16位,则不会是较低的16位。感谢回复,这只是一个简单的测试应用,我意识到我本可以做得更好,但代码不是超级相关的,它只是一个测试,所以我可以根据需要打开端口。我已经在其他2016年的机器上运行过,它运行良好,可以根据需要打开端口。这更多的是windows问题,而不是编码问题。