Latest web development tutorials

شبكة البرمجة جافا

برمجة الشبكات تعني أن يكتب تعمل على أجهزة متعددة برنامج (الكمبيوتر)، وترتبط هذه الأجهزة من خلال الشبكة.

حزمة java.net في API J2SE يحتوي على الفصول واجهات التي توفر تفاصيل الاتصالات على مستوى منخفض. يمكنك استخدام هذه الفئات والواجهات إلى التركيز على حل المشكلة، بدلا من التركيز على تفاصيل الاتصال.

توفر حزمة java.net الدعم لمدة بروتوكولات الشبكة المشتركة:

  • TCP: TCP هو اختصار لبروتوكول التحكم بالإرسال، والتي تضمن اتصالات موثوقة بين اثنين من التطبيقات. تستخدم عادة لبروتوكول الإنترنت، ودعا TCP / IP.
  • UDP: UDP هو اختصار لبروتوكول مخطط بيانات المستخدم، وبروتوكول بدون اتصال. توفير حزم البيانات إلى أن تنتقل بين بيانات التطبيق.

يشرح هذا البرنامج التعليمي الموضوعين التاليين.

  • مأخذ البرمجة: هذا هو مفهوم الشبكة الأكثر استخداما على نطاق واسع، وقد سبق بيان ذلك بتفصيل كبير ل
  • تجهيز URL: هذا الفصل تحدث في فضاء آخر، انقر هنا لمعرفة المزيد عن URL التعامل مع لغة جافا .

مأخذ البرمجة

استخدام مآخذ يوفر TCP آلية اتصال بين جهازي كمبيوتر. برنامج العميل يخلق مقبس ويحاول الاتصال مأخذ الخادم.

عندما يتم تأسيس الاتصال، سيخلق خادم كائن المقبس. العميل والخادم ويمكن الآن إرسال وقراءة وجوه المقبس على التواصل.

وتمثل الطبقة java.net.Socket مأخذ، وتوفر فئة java.net.ServerSocket للاستماع لبرنامج الخادم العميل، وإنشاء آلية للتواصل معهم.

ويحدث ذلك عند اتصال TCP باستخدام الخطوات التالية لإنشاء مأخذ توصيل بين جهازي كمبيوتر:

  • الخادم ServerSocket مثيل كائن يمثل منفذ الاتصالات على الخادم.
  • المكالمات الخادم الطبقة ServerSocket تقبل () الأسلوب، الذي سوف ننتظر حتى يتصل العميل إلى الخادم على منفذ معين.
  • عندما يكون الملقم ينتظر العميل إلى مثيل كائن المقبس، تحديد اسم الملقم ورقم المنفذ لطلب اتصال.
  • يحاول الطبقة مأخذ المنشئ للاتصال العميل إلى الخادم ورقم المنفذ المعين. إذا تم تأسيس الاتصال، لإنشاء العميل كائن المقبس يمكن الاتصال مع الخادم.
  • طريقة على جانب الملقم، وتقبل () بإرجاع مرجع الخادم مأخذ جديدة إلى مأخذ توصيل المقبس العميل.

بعد تأسيس الاتصال باستخدام تيار I / O خلال الاتصالات. كل مأخذ له مداخل وتيار دفق إخراج. إدخال العميل انتاج تيار تيار إلى ملقم، تيار إدخال العميل إلى دفق إخراج الخادم.

TCP هو بروتوكول الاتصال ثنائي الاتجاه، بحيث يمكن إرسال البيانات من خلال البيانات والجداول اثنين في نفس الوقت. وفيما يلي فئة كاملة توفر العديد من الطرق المفيدة لتحقيق مآخذ.


أساليب الفئة ServerSocket

تطبيقات الخادم باستخدام الدرجة java.net.ServerSocket منفذ ويستمع لطلبات العميل.

الطبقة ServerSocket أربعة الصانعين:

لا. طريقة الوصف
1 ServerSocket الجمهور (منفذ كثافة العمليات) رميات IOException
إنشاء الربط إلى منفذ معين من مأخذ الخادم.
2 ServerSocket الجمهور (منفذ الباحث، الباحث المتراكمة ) يلقي IOException
مع تراكم محدد يخلق مأخذ الخادم وأوجب عليها رقم المنفذ المحلي المحدد.
3 ServerSocket الجمهور (منفذ الباحث، الباحث المتراكمة ، عنوان InetAddress) يلقي IOException
باستخدام منفذ محدد، والاستماع المتراكمة، وربط عنوان IP المحلي لملقم تم إنشاؤه.
4 ServerSocket الجمهور () رميات IOException
يخلق مقبس الخادم غير منضم.

يخلق مقبس الخادم غير منضم. إذا لم طريقة ServerSocket منشئ بطرح استثناء، وهو ما يعني أن التطبيق الخاص بك قد تم الالتزام بنجاح إلى ميناء محدد، ويستمع لطلبات العميل.

وهنا بعض المشتركة الفئة أساليب ServerSocket:

لا. طريقة الوصف
1 getLocalPort كثافة الجمهور ()
يعود المنفذ الذي هذا المقبس يصغي.
2 المقبس العام تقبلها () رميات IOException
إنه سميع يقبل هذا المقبس.
3 setSoTimeout الفراغ الجمهور (مهلة كثافة العمليات)
لتحديد قيمة المهلة لتمكين / تعطيل SO_TIMEOUT، في ميلي ثانية.
4 ربط باطلة العامة (SocketAddress المضيف، الباحث المتراكمة)
يربط ServerSocket إلى عنوان محدد (عنوان IP ورقم المنفذ).

أساليب الفئة المقبس

java.net.Socket الدرجة بالنيابة عن العميل والخادم إلى التواصل مع بعضهم البعض في المقبس. للحصول على كائن المقبس العميل عن طريق instantiating وخادم للحصول على إرجاع كائن المقبس من حيث القيمة طريقة تقبلها ().

الطبقة مقبس لديها خمسة الصانعين.

لا. طريقة الوصف
1 المقبس العام (سلسلة المضيف، والميناء كثافة العمليات ) رميات UnknownHostException، IOException.
يخلق مقبس تيار ويربط ذلك إلى رقم المنفذ المحدد في المضيف المحدد.
2 المقبس العام (InetAddress المضيف، والميناء كثافة العمليات ) رميات IOException
يخلق مقبس تيار ويربط إلى عنوان IP معين من رقم المنفذ المحدد.
3 المقبس العام (المضيف سلسلة ميناء كثافة العمليات ، InetAddress localAddress، الباحث localPort) يلقي IOException.
يخلق مقبس ويربط إلى ميناء البعيد المحدد على المضيف البعيد المحدد.
4 المقبس العام (InetAddress المضيف، والميناء كثافة العمليات ، InetAddress localAddress، الباحث localPort) يلقي IOException.
يخلق مقبس ويربط إلى ميناء البعيد المحدد على عنوان البعيد المحدد.
5 المقبس العام ()
إنشاء مأخذ توصيل براء، ونوع النظام الافتراضي SocketImpl

عندما يعود منشئ المقبس، وليس مجرد مثيل كائن المقبس، فإنه سيحاول فعلا للاتصال بالخادم المحدد والميناء.

وفيما يلي بعض الأساليب للاهتمام، وإيلاء الاهتمام إلى العميل والخادم لديه كائن المقبس، بغض النظر عن العميل أو الخادم يمكن استدعاء هذه الأساليب.

لا. طريقة الوصف
1 الفراغ العام الاتصال (SocketAddress المضيف، الباحث مهلة) رميات IOException
هذا الصدد المقبس إلى الخادم، وتحديد قيمة المهلة.
2 الجمهور InetAddress getInetAddress ()
عنوان المرسل للاتصال المقبس.
3 getPort كثافة الجمهور ()
عودة متصل هذا المقبس إلى المنفذ البعيد.
4 getLocalPort كثافة الجمهور ()
عوائد لا بد هذا المقبس إلى منفذ محلي.
5 الجمهور SocketAddress getRemoteSocketAddress ()
عنوان المرسل من نقطة النهاية يتم توصيل هذا المقبس، إذا كانت عوائد غير مترابطة فارغة.
6 الجمهور InputStream getInputStream () رميات IOException
بإرجاع دفق الإدخال لهذا المقبس.
7 الجمهور OutputStream getOutputStream () رميات IOException
بإرجاع دفق إخراج لهذا المقبس.
8 وثيقة باطلة العامة () رميات IOException
يغلق هذا المقبس.

أسلوب فئة InetAddress

وتمثل هذه الفئة عنوان بروتوكول الإنترنت (IP). المدرجة أدناه هي مفيدة عندما طريقة برمجة المقبس:

لا. طريقة الوصف
1 ثابت InetAddress getByAddress (البايت [] ADDR )
في قضية معينة عنوان IP الخام، والعودة الكائن InetAddress.
2 ثابت InetAddress getByAddress (المضيف سلسلة بايت [] ADDR)
وفقا لإنشاء أسماء المضيف InetAddress وعناوين IP الموردة.
3 ثابت InetAddress getByName (المضيف سلسلة)
تحديد عنوان IP للمضيف في حالة وجود اسم المضيف معين.
4 سلسلة getHostAddress ()
إرجاع سلسلة عنوان IP (عرض النص).
5 سلسلة getHostName ()
يحصل على اسم المضيف لعنوان IP.
6 ثابت InetAddress getLocalHost ()
إرجاع المضيف المحلي.
7 toString سلسلة ()
يحول هذا عنوان IP إلى سلسلة.

المثال العميل المقبس

وGreetingClient التالية هو برنامج عميل متصل من خلال مقبس إلى الخادم وإرسال الطلب، ثم الانتظار للرد.

// 文件名 GreetingClient.java

import java.net.*;
import java.io.*;
 
public class GreetingClient
{
   public static void main(String [] args)
   {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try
      {
         System.out.println("Connecting to " + serverName
                             + " on port " + port);
         Socket client = new Socket(serverName, port);
         System.out.println("Just connected to "
                      + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out =
                       new DataOutputStream(outToServer);
 
         out.writeUTF("Hello from "
                      + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in =
                        new DataInputStream(inFromServer);
         System.out.println("Server says " + in.readUTF());
         client.close();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

مثيل الملقم المقبس

برنامج GreetingServer التالية هو تطبيق من جانب الخادم التي تستخدم المقبس الاستماع على المنفذ المعين.

// 文件名 GreetingServer.java

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread
{
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException
   {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run()
   {
      while(true)
      {
         try
         {
            System.out.println("Waiting for client on port " +
            serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            System.out.println("Just connected to "
                  + server.getRemoteSocketAddress());
            DataInputStream in =
                  new DataInputStream(server.getInputStream());
            System.out.println(in.readUTF());
            DataOutputStream out =
                 new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to "
              + server.getLocalSocketAddress() + "\nGoodbye!");
            server.close();
         }catch(SocketTimeoutException s)
         {
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e)
         {
            e.printStackTrace();
            break;
         }
      }
   }
   public static void main(String [] args)
   {
      int port = Integer.parseInt(args[0]);
      try
      {
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e)
      {
         e.printStackTrace();
      }
   }
}

ترجمة التعليمات البرمجية جافا أعلاه، وتنفيذ الأمر التالي لبدء تشغيل الخدمة، استخدم رقم المنفذ هو 6066:

$ java GreetingServer 6066
Waiting for client on port 6066...
شيء مفتوح مثل العملاء التالية:
$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!