首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#应用程序的最大开放端口数

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

Stack Overflow用户
提问于 2012-04-17 07:26:54
回答 2查看 1.3K关注 0票数 1

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 11:56:47

除了tsells的一条评论之外,大多数人都不会向你解释的是,很可能你对tcp堆栈通常是如何工作的假设是无效的(这实际上是我不久前才搞混的事情)。

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

举个例子,看看下面的代码。

代码语言:javascript
运行
复制
  // 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位无符号整数。

代码语言:javascript
运行
复制
public static bool ValidateTcpPort(int port) 
{
    if (port >= 0)
    {
        return port <= 0xffff;  //65535
    }
    return false;
}
票数 4
EN

Stack Overflow用户

发布于 2012-04-17 07:37:07

..depends。我在W2K上有24000个连接,尽管它需要几个注册表调整。我确信Windows Server 2008将允许一些接近64K的最大值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10183077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档