आईपीएड्रेस आईपी + पोर्ट नहीं है। आप आईपीईंडपॉइंट चाहते हैं।
उदाहरण से http://www.java2s.com/Code/CSharp/Network/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));
}
ध्यान दें कि यह केवल आईपी पते स्वीकार करता है, मेजबाननाम नहीं। यदि आप होस्टनाम का समर्थन करना चाहते हैं तो आपको इसे आईपी में हल करना होगा या आईपीएड्रेस/आईपीईंडपॉइंट का उपयोग नहीं करना होगा।
स्रोत
2011-02-11 12:27:52
यहां मुझे दूसरे उदाहरण के लिए शून्य नहीं मिला है। मुझे अपवाद मिलता है। एक आईपीवी 4 पते में पोर्ट नंबर शामिल नहीं हैं। ध्यान दें कि आप "एक आईपी पता * और * एक पोर्ट" वाली स्ट्रिंग को पार्स करने का प्रयास कर रहे हैं। तो अपवाद समझ में आता है। आईपीवी 6 संस्करण क्यों काम करता है, मुझे नहीं पता। –
'आईपीएड्रेस। पर्स (" [:: 1]: 5 ");' मान्य है, * लेकिन * '5' चुपचाप गिरा दिया गया है! यदि आप परिणामी वस्तु का निरीक्षण करते हैं, तो आप देख सकते हैं कि परिणाम केवल ':: 1' है। यह वास्तव में 'IPAddress.Parse' विधि में एक बग हो सकता है ... – hangy
@ मार्टिन्हो फर्नांडीस - यह आईपी 6 पार्सर में एक बग नहीं है, [:: 1]: 5 एक वैध आईपी 6 पता है क्योंकि विभाजक ':' है , '::' नहीं (http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-4) - ** और ** पोर्ट्स को संयोजित करना आईपी 6 में बनाया गया है कल्पना भी, हालांकि आईपीएड्रेस इकाई को * पोर्ट * रखने की उम्मीद नहीं है। यह संभव है कि [ए, बी, सी, डी]: आईपी 6 के लिए बंदरगाह भी अनुमति है क्योंकि आईपी 6 स्पेक का सुझाव है कि यह आईपी 4 स्पेक –