Welcome

首页 / 软件开发 / .NET编程技术 / 动态取得本机可用的端口

动态取得本机可用的端口2010-12-21 博客园 陈希章今天在项目中考虑这样一件事情:我需要动态实例化一个服务,监听某个端 口。那么该怎么来实现这个需求呢?

我立马想到是否有这样的函数,例 如GetAvaliablePorts呢?主意不错,但确没有找到。原先Win32 API中有一个函 数(EnumPorts),但import来过来之后也没有用。

此路不通,看来要自己 动手了。再大的困难也吓不倒英雄的中华儿女嘛。

首先,要知道一些有 关端口号的基础知识

所有的端口都应该大于0,而且小于65535

微 软建议,1024及以前的端口号保留给系统用。也就是说,我们自己程序监听的端 口最好是大于1024

其次,因为没有内置的方法来测试某个端口是否可用 ,我们可能需要自己编写方法来做这个事情。那么怎么做呢?我想到,可以用 socket来测试。我编写了如下这样一个函数

/// <summary>
/// 这个方法是验证某个端口是否可用
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
static bool IsAvaliable (int port)
{
Socket sk = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
bool result = false;
try
{

sk.Bind(new IPEndPoint(IPAddress.Any, port));//尝试绑定 ,因为如果该端口已经被使用,则无法绑定,会导致异常

result = true;
}
catch
{
result = false;
}
finally
{
sk.Close();
}
return result;
}

然后,我就可以 在代码中这样使用

static void Main(string[] args)
{
Console.WriteLine(IsAvaliable(8080));//如果8080端口可用 ,则返回true,反之,返回false
Console.Read();
}