Rumah  >  Artikel  >  Java  >  Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket

Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket

PHPz
PHPzke hadapan
2023-04-21 09:40:081766semak imbas

MulticastSocket ialah DatagramSocket (UDP) dengan fungsi tambahan untuk menyertai "kumpulan" hos multicast lain di Internet.

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!");
            }
        }
    }
}

Simpan fail sebagai GroupChat.java dan kompilasinya menggunakan javac, kemudian jalankan atur cara menggunakan dua argumen baris arahan yang ditentukan. Hos berbilang hantaran ditetapkan oleh alamat IP Kelas D dan nombor port UDP standard. Alamat IP Kelas D berjulat dari 224.0.0.0 hingga 239.255.255.255 (termasuk). Alamat 224.0.0.0 dikhaskan dan tidak boleh digunakan.
Berikut ialah contoh output program di atas:

Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket

Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket

Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket

Kami menggunakan multicast IP hos Alamatnya ialah 239.0.0.0 dan nombor port ialah 1234 (kerana nombor port 0 hingga 1023 dikhaskan). Kumpulan ini mempunyai 3 ahli: Ironman, CaptainAmerica, dan Groot. Mulakan ketiga-tiga terminal dahulu sebelum menghantar mesej, jika tidak, mesej yang dihantar sebelum memulakan terminal akan hilang (kerana tiada penimbal gabungan untuk menyimpan mesej.) Kami memerlukan dua utas dalam aplikasi ini. Satu digunakan untuk menerima input pengguna (menggunakan kelas java.util.Scanner) dan satu lagi digunakan untuk membaca mesej yang dihantar daripada pelanggan lain. Oleh itu, saya memisahkan benang yang melakukan kerja membaca ke dalam ReadThreadclass. Untuk meninggalkan kumpulan, mana-mana pengguna boleh menaip keluar untuk menamatkan sesi.

Atur cara di atas dilaksanakan pada satu mesin. Pengaturcaraan soket sesuai untuk pengaturcaraan teragih. Keperluan ini dipenuhi apabila coretan kod yang sama muncul pada mesin yang berbeza dengan Java dipasang. Ini hanyalah logik perkhidmatan yang paling asas. Projek ini akan menjadi lebih menarik jika bahagian hadapan dibangunkan. Anda boleh membangunkan bahagian hadapan menggunakan Java AWT (Abstract Window Toolkit) atau Java Swing rakan sejawatannya peringkat tinggi. Oleh kerana ini bukan sebahagian daripada pengaturcaraan Socket, saya akan membiarkannya tidak berubah tanpa pergi ke butiran.
Mata Tambahan:

Anda boleh menggabungkan ciri keselamatan rangkaian dengan melakukan penyulitan sebelum menghantar mesej melalui rangkaian.
Teknik primitif seperti Caesar Cipher atau kaedah lanjutan seperti RSA boleh digunakan untuk melakukan penyulitan dan penyahsulitan. Anda boleh cuba menggunakan Java's RMI (Remote Method Invocation) untuk melaksanakan tugas yang sama.
Di sini anda boleh memanfaatkan sepenuhnya abstraksi yang disediakan oleh Java. Walau bagaimanapun, jika matlamat utama anda ialah kecekapan, maka pengaturcaraan Socket ialah pilihan terbaik. Memandangkan ia tidak memerlukan sebarang sokongan runtime, ia lebih pantas berbanding RMI.

Atas ialah kandungan terperinci Pengaturcaraan Java untuk melaksanakan aplikasi sembang kumpulan, menggunakan MulticastSocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam