ipaddress.parse () IPv4의 포트를 사용하는 ipv4.
-
12-11-2019 - |
문제
IPAddress.parse를 사용하여 IP 주소와 포트가 포함 된 문자열을 구문 분석하려고합니다.이것은 IPv6 주소와 잘 작동하지만 IPv4 주소는 아닙니다.이런 이유를 설명 할 수 있습니까?
사용중인 코드는 다음과 같습니다.
IPAddress.Parse("[::1]:5"); //Valid
IPAddress.Parse("127.0.0.1:5"); //null
. 올바른 솔루션이 없습니다
다른 팁
Uri url;
IPAddress ip;
if (Uri.TryCreate(String.Format("http://{0}", "127.0.0.1:5"), UriKind.Absolute, out url) &&
IPAddress.TryParse(url.Host, out ip))
{
IPEndPoint endPoint = new IPEndPoint(ip, url.Port);
}
. 포트가 IP 주소의 일부가 아니기 때문에 발생합니다.그것은 TCP / UDP에 속하며 먼저 그것을 제거해야합니다.URI 클래스 가이 제품에 도움이 될 수 있습니다.
ipaddress는 IP + 포트가 아닙니다.당신은 ipendpoint를 원합니다. http://www.java2s.com/code/csharp/네트워크 / parsehoststring.htm
public static void ParseHostString(string hostString, ref string hostName, ref int port)
{
hostName = hostString;
if (hostString.Contains(":"))
{
string[] hostParts = hostString.Split(':');
if (hostParts.Length == 2)
{
hostName = hostParts[0];
int.TryParse(hostParts[1], out port);
}
}
}
.
편집 : 확인, 가장 우아한 해결책이 아니 었습니다.내가 쓴 것을 썼다.
// You need to include some usings:
using System.Text.RegularExpressions;
using System.Net;
// Then this code (static is not required):
private static Regex hostPortMatch = new Regex(@"^(?<ip>(?:\[[\da-fA-F:]+\])|(?:\d{1,3}\.){3}\d{1,3})(?::(?<port>\d+))?$", System.Text.RegularExpressions.RegexOptions.Compiled);
public static IPEndPoint ParseHostPort(string hostPort)
{
Match match = hostPortMatch.Match(hostPort);
if (!match.Success)
return null;
return new IPEndPoint(IPAddress.Parse(match.Groups["ip"].Value), int.Parse(match.Groups["port"].Value));
}
.
이 하나는 호스트 이름이 아닌 IP 주소 만 허용합니다.호스트 이름을 지원하려면 IP로 해결해야하거나 ipaddress / ipendpoint를 사용하지 않아도됩니다.
ipaddress.parse는 IPv4의 IPv4 및 IPv6의 콜로위 - 16 진수 표기법에서 IP 주소가있는 IP 주소를 포함하는 문자열을 사용하는 것입니다.따라서 첫 번째 예제는 IPv6에서 작동하므로 두 번째 예는 IPv4의 포트를 지원하지 않기 때문에 실패합니다.링크 http://msdn.microsoft.com/en-us/library/system..net.ipaddress.parse.aspx
제휴하지 않습니다 StackOverflow