首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#的可用TCP端口探测

使用C#的可用TCP端口探测
EN

Stack Overflow用户
提问于 2009-01-30 13:55:11
回答 3查看 2.2K关注 0票数 5

如何探测可用的TCP端口以便以编程方式配置WCF服务EndPoint?

EN

回答 3

Stack Overflow用户

发布于 2009-01-30 14:02:13

如果您动态选择服务器端口,您的客户端如何知道端点?

不管怎样,

这是一种探测开放端口的肮脏方法

代码语言:javascript
复制
 for (int port = 2000; port < 65535; port++) 
                   {
                   IPEndPoint ep = new IPEndPoint(IPAddress.Any, port);
                   Socket socket = new Socket(AddressFamily.InterNetwork, st, pt);

                   try { 
                         socket.Bind(ep);
                         socket.Close();  
                         //Port available
                        } 
                   catch (SocketException)
                        {
                        Debug.WriteLine("Port not available {0}", port);
                        } 

                   }

然后,尝试创建自定义服务主机。

http://msdn.microsoft.com/en-us/library/aa395224.aspx

票数 3
EN

Stack Overflow用户

发布于 2011-05-24 17:42:33

这不是一种特别优雅的方式,但您可以尝试打开主机并捕获AddressAlreadyInUseException异常。这就消除了Socket的使用和amazedsaint方法中存在的竞争条件:在检查和您尝试打开服务之间不能占用端口。

所以,基本上:

代码语言:javascript
复制
ServiceHost host;

for(int port = 2000; port < 65535; port++) {
    var address = GetBaseAddress(port);
    host = new ServiceHost(typeof(MyService), address);
    try {
        host.Open();
        break;
    }
    catch(AddressAlreadyInUseException) {

    }
}

GetBaseAddress方法只是使用String.Format创建一个地址,以便将端口号放在地址模式中的正确位置。

我想现在更相关了,因为我们在.NET 4中有了WCF Discovery

票数 0
EN

Stack Overflow用户

发布于 2011-05-24 17:54:47

你要找的是:Socket.Select

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

https://stackoverflow.com/questions/495552

复制
相关文章

相似问题

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