المتطلبات: إعطاء عنوان URL ، على سبيل المثال: http://www.cncounter.com/tools/shorturl.php ، تحليل عنوان IP المقابل ورقم المنفذ.
ملاحظة: لا تتضمن هذه المقالة بروتوكول DNS الأساسي ، ولكنه يستخدم مباشرة واجهة برمجة التطبيقات التي توفرها منصة Java للعمل.
DNS هي أيضًا خدمة اسم المجال ، وهي خدمة اسم المجال.
نحن نعلم أن الفصول المتعلقة بعناوين URL في Java تشمل java.net.url و java.net.uri ، وما إلى ذلك ، حيث يكون URI محدد موقع الموارد وقد يشمل بروتوكولات مثل الملف:
لذا ، نستخدم هنا فئة عنوان URL والرمز للحصول على رقم المنفذ كما يلي:
/ ** * احصل على رقم المنفذ * * param href url ، ftp ، http ، nntp ، ... إلخ. // رقم المنفذ ؛ إذا لم يتم تحديده بشكل صريح في HREF ، فهو -1 int port = url.getport () ؛ if (Port <0) {// احصل على رقم المنفذ الافتراضي لمنفذ البروتوكول المقابل = url.getDefaultPort () ؛ } منفذ الإرجاع ؛ }فئة عنوان URL هي فئة موجودة في Java في الأيام الأولى. المنطق الداخلي معقد للغاية. إذا كنت مهتمًا ، فيمكنك عرض رمز تنفيذ JDK ذي الصلة بنفسك.
هناك طريقتان للحصول على رقم المنفذ:
GetPort () هو الحصول على رقم المنفذ المحدد في عنوان URL. إذا لم يتم تحديدها ، فإنه يعود -1.
GetDefaultPort () هو الحصول على رقم المنفذ الافتراضي المقابل للبروتوكول ، مثل رقم المنفذ الافتراضي لبروتوكول HTTP هو 80 ، رقم المنفذ الافتراضي لبروتوكول HTTPS هو 443 ، إلخ.
ثم ننظر إلى الكود الذي يستخرج الجزء المضيف:
/ ** * احصل على جزء المضيف * * param href url ، ftp ، http ، nntp ، ... etc * regurn * throws ioException */ part static string parsehost (String HREF) يلقي ioException {// url url = new url (href) ؛ // احصل على مضيف سلسلة المضيف = url.gethost () ؛ عودة المضيف }في جوهرها ، يمكنك أيضًا اعتراض المضيف بشكل مباشر من خلال التعبيرات العادية أو السلسلة ، ولكن إذا واجهت حالات معقدة ، فليس من السهل التعامل معها ، على سبيل المثال: عناوين URL المعقدة مثل https: // yourname: [email protected]/mumu-osc/nicefish.git.
بعد استخراج اسم المجال ، يمكنك البحث عن عنوان IP من خلال فئة java.net.inetaddress.
الرمز يشبه هذا:
/ ** * حل عنوان IP وفقًا لاسم المجال (المضيف) * param اسم المجال المضيف * return * throws ioException */ public static String parseip (سلسلة مضيف) يلقي iOexception {// البحث عن عنوان IP استنادًا إلى اسم المجال inetaddress inetaddress = inetaddress.getbyname (host) ؛ // عنوان سلسلة عنوان IP = inetaddress.gethostaddress () ؛ عنوان المرسل؛ }كما ترون ، استخدمنا طريقة inetaddress.getByName () ثابت للعثور على IP.
يوفر هذا الفئة أيضًا طرقًا ثابتة أخرى ، ولكنها لا تستخدم بشكل عام كثيرًا. إذا كنت مهتمًا ، فيمكنك النقر فوق رمز المصدر المفتوح لإلقاء نظرة.
ثم ، نقوم بإجراء اختبار بسيط من خلال الطريقة الرئيسية ():
Public Static Void Main (String [] args) يلقي ioException {// String href = "http://www.cncounter.com/tools/shorturl.php" ؛ // رقم المنفذ int port = parseport (HREF) ؛ // اسم المجال سلسلة مضيف = parsehost (HREF) ؛ // عنوان سلسلة عنوان IP = parseip (مضيف) ؛ // system.out.println ("host =" + host) ؛ System.out.println ("port =" + port) ؛ System.out.println ("address =" + address) ؛ }نتيجة التنفيذ هي:
مضيف = www.cncounter.comport = 80address = 198.11.179.83
معرفة رقم IP ورقم المنفذ ، يمكننا الاتصال مباشرة من خلال المقبس.
بالطبع ، إذا كان بروتوكول HTTP ، فيمكنك استخدام أداة HTTPClient من Apache ، وهي قوية وسهلة الاستخدام. ولكن أحد عيوب هذه المكتبة هو أن الإصدارات غير متوافقة ، وغالبًا ما يتم تغيير واجهة برمجة التطبيقات ، ويجب معالجتها وفقًا لرقم الإصدار المحدد عند البرمجة.
الرمز الكامل يشبه هذا:
استيراد java.io.ioException ؛ استيراد java.net.*؛/***ابحث عن عنوان IP*/الفئة العامة testfinddns {public static void main (string [] args) remspection {// string href = "http://www.cncounter.com/tools/shorturl.php" ؛ // رقم المنفذ int port = parseport (HREF) ؛ // اسم المجال سلسلة مضيف = parsehost (HREF) ؛ // عنوان سلسلة عنوان IP = parseip (مضيف) ؛ // system.out.println ("host =" + host) ؛ System.out.println ("port =" + port) ؛ System.out.println ("address =" + address) ؛ } / ** * احصل على رقم المنفذ * * param href url ، ftp ، http ، nntp ، ... etc * return * @throws ioexception * / public static int parseport (String href) يلقي ioException {// url url = new url (href) ؛ // رقم المنفذ ؛ إذا لم يتم تحديده بشكل صريح في HREF ، فهو -1 int port = url.getport () ؛ if (Port <0) {// احصل على رقم المنفذ الافتراضي لمنفذ البروتوكول المقابل = url.getDefaultPort () ؛ } منفذ الإرجاع ؛ } / ** * احصل على جزء المضيف * * param href url ، ftp ، http ، nntp ، ... etc * return * throws ioException * / سلسلة ثابتة parsehost (سلسلة href) رمي ioException {// url url = new url (href) ؛ // احصل على مضيف سلسلة المضيف = url.gethost () ؛ عودة المضيف } / ** * حل عنوان IP استنادًا إلى اسم المجال (المضيف) * * param اسم المجال المضيف * regurn * throws ioException * / public static string parseip (سلسلة مضيف) يلقي ioException {// البحث عن عنوان IP استنادًا إلى اسم المجال inetaddress.getallbyname (المضيف) ؛ inetaddress inetaddress = inetaddress.getByName (host) ؛ // عنوان سلسلة عنوان IP = inetaddress.gethostaddress () ؛ عنوان المرسل؛ }}حسنًا ، يرجى تنفيذ العبوة والمعالجة المناسبة وفقًا للوضع المحدد.
لخص
ما سبق هو طريقة Java التي قدمها المحرر لك عن طريق الاستعلام عن عناوين DNS/IP بناءً على عنوان URL. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!