gpt4 book ai didi

c# - C# 应用程序的最大开放端口数

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:49 25 4
gpt4 key购买 nike

我正在开发一个服务器应用程序,我想打开很多端口。我可以打开的最大端口数和一台 Windows 机器是多少?谢谢!

编辑:我的意思是我可以打开多少个端口来监听(作为服务器)

最佳答案

除 tsells 的评论外,大多数人没有向您解释的是,您很可能对 tcp 堆栈通常如何工作有一个无效的假设(这实际上是我直到不久前才感到困惑的事情)。

原因是,当你有一个 TcpListener(特定于 DotNet 但可能适用于大多数其他 tcp 库)时,当你开始监听并且发生传入连接时,堆栈将监听你选择的端口(例如:端口:1234),但一旦连接就会将连接移动到(通常)随机未分配的端口。

例如,查看以下代码。

  // Set the TcpListener on port 13000.
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");

// TcpListener server = new TcpListener(port);
server = new TcpListener(localAddr, port);

// Start listening for client requests.
server.Start();

// Buffer for reading data
Byte[] bytes = new Byte[256];
String data = null;

// Enter the listening loop.
while(true)
{
Console.Write("Waiting for a connection... ");

// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!");
//Here you will find that if you look at the client LocalEndPoint a random dynamic port will be assigned.
}

这基本上意味着,除非你有一个非常好的理由,否则你不应该真正关心这些实现细节,并且最大开放端口从根本上是无关紧要的(也祝你好运尝试写产生 30000 个线程并正确有效地维护这些连接的东西)。

PS:当提供端口号时,我还在 System.Net.Sockets.TcpListener 内部验证了调用以下代码,如果此测试失败,将抛出 ArgumentOutOfRangeException。这证实了“Igby Largeman”所说的,它是一个 16 位无符号整数。

public static bool ValidateTcpPort(int port) 
{
if (port >= 0)
{
return port <= 0xffff; //65535
}
return false;
}

关于c# - C# 应用程序的最大开放端口数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com