我有一个服务器应用程序,我试图自动设置IP地址,取自机器的动态分配的IP地址。到目前为止,我已经得到了这个以获取IPv4,但是它返回了类型IPAddress [],我在转换为字符串[]时遇到了一些麻烦,所以我的HttpListener可以使用它。有什么迹象表明我可以转换它吗?或者我是以错误的方式解决这个问题?
这就是我用来获取IP地址的内容:
class Program
{
static void Main(string[] args)
{
string name = (args.Length < 1) ? Dns.GetHostName() : args[0];
try
{
IPAddress[] addrs = Array.FindAll(Dns.GetHostEntry(string.Empty).AddressList,
a => a.AddressFamily == AddressFamily.InterNetwork);
Console.WriteLine("Your IP address is: ");
foreach (IPAddress addr in addrs)
Console.WriteLine("{0} {1}", name, addr);
//Here I'm trying to convert the IPAddress[] into a string[] to use in my listener
string str = addrs.ToString();
string[] ipString = { str };
Response.Listener(ipString);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
//current way of setting the IP address - not optimal
string[] ipstring = new string[1] {"10.10.180.11:8080"};
Response.Listener(ipstring);
}
}
和好时光的倾听者:
public static void Listener(string[] prefixes)
{
if (!HttpListener.IsSupported)
{
Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
return;
}
// URI prefixes are required,
// for example "http://contoso.com:8080/index/".
if (prefixes == null || prefixes.Length == 0)
throw new ArgumentException("prefixes");
// Create a listener.
HttpListener listener = new HttpListener();
// Add the prefixes.
foreach (string s in prefixes)
{
listener.Prefixes.Add("http://" + s + "/");
}
listener.Start();
答案 0 :(得分:2)
这应该可以解决问题。
string[] ips = addresses.Select(ip => ip.ToString()).ToArray();
确保您拥有System.Linq
答案 1 :(得分:0)
您正在尝试将IPAdress的数组转换为一个IP地址。
您可以使用LINQ转换每个IP地址,然后您可以创建String的数组:
String[] strAddrs = (from cad in addrs select cad.ToString()).ToArray();
别忘了:using System.Linq;
答案 2 :(得分:0)
如果您有IPAddress
对象,则可以这样获得字符串表示形式:
v4:
validIP4.MapToIPv4().ToString();
v6:
validIP4.MapToIPv6().ToString();