الخميس، 28 يناير 2021

كود برنامج تطبيق دردشة جماعية في Java

 

تطبيق دردشة جماعية في Java

في هذا المنشور ، تمت مناقشة تطبيق دردشة جماعية يستخدم فئة MulticastSocket (Java Platform SE 7). MulticastSocket هو (UDP) DatagramSocket ، مع إمكانات إضافية للانضمام إلى "مجموعات" من مضيفي البث المتعدد الآخرين على الإنترنت.

التنفيذ

import java.net.*;

import java.io.*;

import java.util.*;

public class GroupChat

{

    private static final String TERMINATE = "Exit";

    static String name;

    static volatile boolean finished = false;

    public static void main(String[] args)

    {

        if (args.length != 2)

            System.out.println("Two arguments required: <multicast-host> <port-number>");

        else

        {

            try

            {

                InetAddress group = InetAddress.getByName(args[0]);

                int port = Integer.parseInt(args[1]);

                Scanner sc = new Scanner(System.in);

                System.out.print("Enter your name: ");

                name = sc.nextLine();

                MulticastSocket socket = new MulticastSocket(port);

              

                // Since we are deploying

                socket.setTimeToLive(0);

                //this on localhost only (For a subnet set it as 1)

                  

                socket.joinGroup(group);

                Thread t = new Thread(new

                ReadThread(socket,group,port));

              

                // Spawn a thread for reading messages

                t.start(); 

                  

                // sent to the current group

                System.out.println("Start typing messages...\n");

                while(true)

                {

                    String message;

                    message = sc.nextLine();

                    if(message.equalsIgnoreCase(GroupChat.TERMINATE))

                    {

                        finished = true;

                        socket.leaveGroup(group);

                        socket.close();

                        break;

                    }

                    message = name + ": " + message;

                    byte[] buffer = message.getBytes();

                    DatagramPacket datagram = new

                    DatagramPacket(buffer,buffer.length,group,port);

                    socket.send(datagram);

                }

            }

            catch(SocketException se)

            {

                System.out.println("Error creating socket");

                se.printStackTrace();

            }

            catch(IOException ie)

            {

                System.out.println("Error reading/writing from/to socket");

                ie.printStackTrace();

            }

        }

    }

}

class ReadThread implements Runnable

{

    private MulticastSocket socket;

    private InetAddress group;

    private int port;

    private static final int MAX_LEN = 1000;

    ReadThread(MulticastSocket socket,InetAddress group,int port)

    {

        this.socket = socket;

        this.group = group;

        this.port = port;

    }

      

    @Override

    public void run()

    {

        while(!GroupChat.finished)

        {

                byte[] buffer = new byte[ReadThread.MAX_LEN];

                DatagramPacket datagram = new

                DatagramPacket(buffer,buffer.length,group,port);

                String message;

            try

            {

                socket.receive(datagram);

                message = new

                String(buffer,0,datagram.getLength(),"UTF-8");

                if(!message.startsWith(GroupChat.name))

                    System.out.println(message);

            }

            catch(IOException e)

            {

                System.out.println("Socket closed!");

            }

        }

    }

}

 

احفظ الملف باسم GroupChat.java وقم بترجمته باستخدام javac ثم قم بتشغيل البرنامج باستخدام وسيطتي سطر أوامر كما هو محدد. يتم تحديد مضيف البث المتعدد بواسطة عنوان IP من الفئة D ورقم منفذ UDP قياسي. تقع عناوين IP للفئة D في النطاق من 224.0.0.0 إلى 239.255.255.255 ، ضمناً. العنوان 224.0.0.0 محجوز ويجب عدم استخدامه.

فيما يلي نموذج لإخراج البرنامج أعلاه:

 

code java

code java

code java

لقد استخدمنا عنوان IP لمضيف الإرسال المتعدد كـ 239.0.0.0 ورقم المنفذ كـ 1234 (نظرًا لأن أرقام المنافذ من 0 إلى 1023 محجوزة). هناك 3 أعضاء في المجموعة: الرجل الحديدي ، CaptainAmerica ، و Groot. ابدأ تشغيل جميع المحطات الثلاثة أولاً قبل إرسال الرسالة ، وإلا فستفقد الرسائل التي يتم إرسالها قبل بدء تشغيل الجهاز الطرفي (نظرًا لعدم وجود وسيلة تخزين مؤقت مدمجة لتخزين الرسائل). أحدهما لقبول إدخال المستخدم (باستخدام فئة java.util.Scanner) والآخر لقراءة الرسائل المرسلة من عملاء آخرين. ومن ثم قمت بفصل الخيط الذي يقوم بعمل القراءة في ReadThreadclass. لمغادرة المجموعة ، يمكن لأي مستخدم كتابة خروج لإنهاء الجلسة.

 

يتم تنفيذ البرنامج أعلاه على جهاز واحد. برمجة المقبس مخصصة للبرمجة الموزعة. يمكن أن يفي نفس الجزء من مقتطف الشفرة عند وجوده على أجهزة مختلفة مثبت عليها Java بهذا المطلب. هذا مجرد منطق خدمة العظام المجردة. سيكون المشروع أكثر روعة إذا تم تطوير الواجهة الأمامية. يمكنك استخدام Java's AWT (مجموعة أدوات النافذة المجردة) أو نظيرتها المتقدمة ، Java Swing لتطوير الواجهة الأمامية. نظرًا لأن هذا لن يكون جزءًا من برمجة Socket ، فأنا أتركه كما هو دون الخوض في التفاصيل.

 

يمكنك دمج ميزة أمان الشبكة عن طريق إجراء التشفير قبل إرسال الرسالة عبر الشبكة.

يمكن استخدام التقنيات البدائية مثل تشفير قيصر أو الطرق المتقدمة مثل RSA لأداء فك التشفير. يمكنك محاولة استخدام Java's RMI (استدعاء الطريقة عن بُعد) لأداء نفس المهمة.

هنا ، يمكنك الاستفادة من التجريد الذي توفره Java إلى أقصى حد. ومع ذلك ، إذا كان هدفك الأساسي هو الكفاءة ، فإن برمجة Socket هي الخيار الأفضل. نظرًا لأنه لا يتطلب أي دعم لوقت التشغيل ، فهو أسرع قليلاً مقارنةً بـ RMI.

 


***********************


***********************

إذا كنت تحتاج إلى عدد أكبر من الفقرات يتيح لك مولد النص العربى زيادة عدد الفقرات كما تريد. هذا النص هو مثال لنص يمكن أن يستبدل في نفس المساحة, ومن هنا وجب على المصمم أن يضع نصوصا مؤقتة على التصميم ليظهر للعميلً