我想创建一个在内部提供网页的应用程序,并且可以在同一台机器上的多个实例中运行.为此,我想创建一个HttpListener
侦听端口的方法:
随机选择
目前尚未使用
基本上,我想要的是:
mListener = new HttpListener(); mListener.Prefixes.Add("http://*:0/"); mListener.Start(); selectedPort = mListener.Port;
我怎么能做到这一点?
如果绑定到端口0,TcpListener将找到一个随机未使用的端口来监听.
public static int GetRandomUnusedPort() { var listener = new TcpListener(IPAddress.Any, 0); listener.Start(); var port = ((IPEndPoint)listener.LocalEndpoint).Port; listener.Stop(); return port; }
这样的事情怎么样:
static ListusedPorts = new List (); static Random r = new Random(); public HttpListener CreateNewListener() { HttpListener mListener; int newPort = -1; while (true) { mListener = new HttpListener(); newPort = r.Next(49152, 65535); // IANA suggests the range 49152 to 65535 for dynamic or private ports. if (usedPorts.Contains(newPort)) { continue; } mListener.Prefixes.Add(string.Format("http://*:{0}/", newPort)); try { mListener.Start(); } catch { continue; } usedPorts.Add(newPort); break; } return mListener; }
我不确定你将如何找到该机器上正在使用的所有端口,但如果你试图监听已经使用的端口,你应该得到一个例外,在这种情况下,该方法只会选择另一个港口.