IPAddress.TryParse返回false

时间:2014-03-23 19:36:48

标签: c# ip-address tryparse

我有一个IP地址为

的字符串
clientId = "172.19.200.29:10308"

我需要从中生成IPAddress对象。请阅读以下内容

    IPAddress clientIpAddr;
    if (IPAddress.TryParse(clientId, out clientIpAddr)) //<-returns false
//clientIpAddr is null

可能出现什么问题

2 个答案:

答案 0 :(得分:6)

它不是IP地址,而是IP地址和端口

if (IPAddress.TryParse(clientId.Split(':')[0], out clientIpAddr))

如果您需要IPv6支持

 var arr = clientId.Split(':');
 clientId = arr.Length <= 2 ? arr[0] : string.Join(":", arr.Take(8).ToArray());
 if (IPAddress.TryParse(clientId, out clientIpAddr))

答案 1 :(得分:3)

IPAddress class 应仅包含IP (不包含端口)。 您可能会对IPEndPoint class感到困惑,{{3}}包含IP和端口:

将IPAddress对象实例化如下:

string clientId = "172.19.200.29:10308";
IPAddress clientIpAddr;
var success = IPAddress.TryParse(clientId.Split(':')[0], out clientIpAddr);

如果需要,您可以将IPEndPoint实例化如下:

// Assuming that both ip and port are valid.
int port = int.Parse(clientId.Split(':')[1]);

var endpoint = new IPEndPoint(clientIpAddr, port);