Home  >  Article  >  Java  >  Java programming to implement group chat application, using MulticastSocket

Java programming to implement group chat application, using MulticastSocket

PHPz
PHPzforward
2023-04-21 09:40:081775browse

MulticastSocket is a (UDP) DatagramSocket with the added functionality of joining "groups" of other multicast hosts on the 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!");
            }
        }
    }
}

Save the file as GroupChat.java and compile it using javac, then run the program using the two command line arguments specified. Multicast hosts are designated by Class D IP addresses and standard UDP port numbers. Class D IP addresses range from 224.0.0.0 to 239.255.255.255 (inclusive). The address 224.0.0.0 is reserved and should not be used.
The following is a sample output from the above program:

Java programming to implement group chat application, using MulticastSocket

Java programming to implement group chat application, using MulticastSocket

Java programming to implement group chat application, using MulticastSocket

##We use multicast host IP The address is 239.0.0.0 and the port number is 1234 (because port numbers 0 to 1023 are reserved). The group has 3 members: Ironman, CaptainAmerica, and Groot. Start all three terminals first before sending messages, otherwise messages sent before starting the terminal will be lost (because there are no merged buffers to store the messages.) We need two threads in this application. One is used to accept user input (using the java.util.Scanner class) and the other is used to read messages sent from other clients. Therefore, I separated the thread that does the reading work into a ReadThreadclass. To leave the group, any user can type exit to terminate the session.

The above program is executed on a single machine. Socket programming is suitable for distributed programming. This requirement is satisfied when the same code snippet appears on different machines with Java installed. This is just the most basic service logic. This project will be more attractive if the front-end is developed. You can develop the front-end using Java's AWT (Abstract Window Toolkit) or its high-level counterpart Java Swing. Since this is not part of Socket programming, I'll leave it unchanged without going into the details.

Additional Points:

You can incorporate network security features by performing encryption before sending messages over the network.

Primitive techniques such as the Caesar cipher or advanced methods such as RSA can be used to perform encryption and decryption. You can try using Java's RMI (Remote Method Invocation) to perform the same task.
Here you can take maximum advantage of the abstractions provided by Java. However, if your main goal is efficiency, then Socket programming is the best choice. Since it does not require any runtime support, it is faster compared to RMI.

The above is the detailed content of Java programming to implement group chat application, using MulticastSocket. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete