문제

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top