برمجة جافا للمأخذ – مثال على خادم المأخذ والعميل

مرحبًا بك في مثال برمجة جافا للمأخذ. كل خادم هو برنامج يعمل على نظام محدد ويستمع على منفذ محدد. يتم ربط المأخذ بأرقام المنافذ، وعند تشغيل أي خادم، يتم مجرد الاستماع على المأخذ وانتظار طلبات العملاء. على سبيل المثال، ينتظر خادم تومكات الذي يعمل على المنفذ 8080 طلبات العملاء، وعندما يتلقى أي طلب من العميل، يستجيب له.

برمجة المأخذ بلغة جافا

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

مثال على خادم المأخذ بلغة جافا

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * This class implements java Socket server
 * @author pankaj
 *
 */
public class SocketServerExample {
    
    //متغير ServerSocket ثابت
    private static ServerSocket server;
    //منفذ خادم المقبس الذي سيستمع عليه
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //إنشاء كائن خادم المقبس
        server = new ServerSocket(port);
        //الاستماع بشكل لا نهائي حتى يتلقى استدعاء 'خروج' أو يتم إنهاء البرنامج
        while(true){
            System.out.println("Waiting for the client request");
            //إنشاء مأخذ وانتظار اتصال العميل
            Socket socket = server.accept();
            //قراءة من المأخذ إلى كائن ObjectInputStream
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //تحويل كائن ObjectInputStream إلى سلسلة نصية
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //إنشاء كائن ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //كتابة الكائن إلى المقبس
            oos.writeObject("Hi Client "+message);
            //إغلاق الموارد
            ois.close();
            oos.close();
            socket.close();
            //إنهاء الخادم إذا أرسل العميل طلب الخروج
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //إغلاق كائن ServerSocket
        server.close();
    }
    
}

عميل مقبس جافا

package com.journaldev.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * This class implements java socket client
 * @author pankaj
 *
 */
public class SocketClientExample {

    public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
        //الحصول على عنوان IP المضيف المحلي ، إذا كان الخادم يعمل على عنوان IP آخر ، فيجب عليك استخدام ذلك
        InetAddress host = InetAddress.getLocalHost();
        Socket socket = null;
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        for(int i=0; i<5;i++){
            //إنشاء اتصال المقبس بالخادم
            socket = new Socket(host.getHostName(), 9876);
            //كتابة إلى المقبس باستخدام ObjectOutputStream
            oos = new ObjectOutputStream(socket.getOutputStream());
            System.out.println("Sending request to Socket Server");
            if(i==4)oos.writeObject("exit");
            else oos.writeObject(""+i);
            //قراءة رسالة رد الخادم
            ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);
            //إغلاق الموارد
            ois.close();
            oos.close();
            Thread.sleep(100);
        }
    }
}

لاختبار برمجة المأخذ في جافا للتواصل بين الخادم والعميل، نحتاج أولاً إلى تشغيل فئة SocketServerExample. عند تشغيل خادم المأخذ، سيقوم بطباعة “في انتظار طلب العميل” ثم ينتظر الطلب من العميل. الآن، عند تشغيل فئة SocketClientExample، سيقوم بإرسال طلب إلى خادم المأخذ في جافا ويقوم بطباعة رسالة الاستجابة في وحدة التحكم. إليك مخرجات برنامج خادم المأخذ في جافا SocketServerExample.

Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!

وإليك مخرجات برنامج عميل المأخذ في جافا SocketClientExample.

Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit

هذا كل شيء لجولة سريعة حول برمجة المأخذ في جافا. آمل أن تتمكن من البدء في برمجة خادم المأخذ وبرمجة عميل المأخذ في جافا. المرجع: مستندات أوراكل

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client