import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;  

public class UDPMulticastClient{
	JFrame frame;
	JPanel panel;
	JTextField field1, field2, field3, field4, field5, field6, field7, field8;
	JTextArea area;
	JScrollPane pane;
	JLabel label;
	JButton button;
	JList list;
	Checkbox check1, check2, check3, check4;
	public static void main(String[] args) {
		UDPMulticastClient u = new UDPMulticastClient();
	}
	public UDPMulticastClient(){
		frame = new JFrame("UDP Broadcast Client");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setUndecorated(true);
		frame.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
		panel = new JPanel();
		panel.setLayout(null);
		label = new JLabel("Destination IP");
		label.setBounds(80, 5, 100, 30);
		panel.add(label);
		check1 = new Checkbox();
		check1.setBounds(5, 40, 20, 20);
		panel.add(check1);
		label = new JLabel("Client 1 :");
		label.setBounds(25, 35, 60, 30);
		panel.add(label);
		field1 = new JTextField(20);
		field1.setBounds(80, 35, 120, 20);
		panel.add(field1);
		label = new JLabel("Destination Port");
		label.setBounds(255, 5, 100, 30);
		panel.add(label);
		field2 = new JTextField(10);
		field2.setBounds(255, 35, 100, 20);
		panel.add(field2);
		check2 = new Checkbox();
		check2.setBounds(5, 70, 20, 20);
		panel.add(check2);
		label = new JLabel("Client 2 :");
		label.setBounds(25, 65, 60, 30);
		panel.add(label);
		field3 = new JTextField(20);
		field3.setBounds(80, 65, 120, 20);
		panel.add(field3);
		field4 = new JTextField(10);
		field4.setBounds(255, 65, 100, 20);
		panel.add(field4);
		check3 = new Checkbox();
		check3.setBounds(5, 100, 20, 20);
		panel.add(check3);
		label = new JLabel("Client 3 :");
		label.setBounds(25, 95, 60, 30);
		panel.add(label);
		field5 = new JTextField(20);
		field5.setBounds(80, 95, 120, 20);
		panel.add(field5);
		field6 = new JTextField(10);
		field6.setBounds(255, 95, 100, 20);
		panel.add(field6);
		check4 = new Checkbox();
		check4.setBounds(5, 130, 20, 20);
		panel.add(check4);
		label = new JLabel("Client 4 :");
		label.setBounds(25, 125, 60, 30);
		panel.add(label);
		field7 = new JTextField(20);
		field7.setBounds(80, 125, 120, 20);
		panel.add(field7);
		field8 = new JTextField(10);
		field8.setBounds(255, 125, 100, 20);
		panel.add(field8);
		label = new JLabel("Message:");
		label.setBounds(10, 160, 80, 30);
		panel.add(label);
		area = new JTextArea();
		pane = new JScrollPane(area);
		pane.setBounds(10, 190, 300, 200);
		panel.add(pane);
		button = new JButton("Send");
		button.setBounds(235, 410, 75, 30);
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				new SendRequest();
			}
		});
		panel.add(button);
		frame.add(panel);
		frame.setSize(400, 500);
		frame.setVisible(true);
	}
	public class SendRequest{
		SendRequest(){
			try{
				boolean b = true;
				if(check1.getState() == b){
					String dip = field1.getText();
					InetAddress address = InetAddress.getByName(dip);
					MulticastSocket socket = new MulticastSocket();
					socket.joinGroup(address);
					String port = field2.getText();
					int pnum = Integer.parseInt(port);
					String mess = area.getText();
					byte message[] = mess.getBytes();
					DatagramPacket packet = new DatagramPacket(message, message.length, address, pnum);
					socket.send(packet);
					area.setText("");
					//For Received message
					DatagramPacket packet1 = new DatagramPacket(message, message.length);
					socket.receive(packet1);
					String recmessage =new String(packet1.getData());
					area.append("Received from server: " + recmessage);
					socket.close();
				}
				if(check2.getState() == b){
					String dip = field3.getText();
					InetAddress address = InetAddress.getByName(dip);
					MulticastSocket socket = new MulticastSocket();
					socket.joinGroup(address);
					String port = field4.getText();
					int pnum = Integer.parseInt(port);
					String mess = area.getText();
					byte message[] = mess.getBytes();
					DatagramPacket packet = new DatagramPacket(message, message.length, address, pnum);
					socket.send(packet);
					area.setText("");
					//For Received message
					DatagramPacket packet1 = new DatagramPacket(message, message.length);
					socket.receive(packet1);
					String recmessage =new String(packet1.getData());
					area.append("Received from server: " + recmessage);
					socket.close();
				}
				if(check3.getState() == b){
					String dip = field5.getText();
					InetAddress address = InetAddress.getByName(dip);
					MulticastSocket socket = new MulticastSocket();
					socket.joinGroup(address);
					String port = field6.getText();
					int pnum = Integer.parseInt(port);
					String mess = area.getText();
					byte message[] = mess.getBytes();
					DatagramPacket packet = new DatagramPacket(message, message.length, address, pnum);
					socket.send(packet);
					area.setText("");
					//For Received message
					DatagramPacket packet1 = new DatagramPacket(message, message.length);
					socket.receive(packet1);
					String recmessage =new String(packet1.getData());
					area.append("Received from server: " + recmessage);
					socket.close();
				}
				if(check4.getState() == b){
					String dip = field7.getText();
					InetAddress address = InetAddress.getByName(dip);
					MulticastSocket socket = new MulticastSocket();
					socket.joinGroup(address);
					String port = field8.getText();
					int pnum = Integer.parseInt(port);
					String mess = area.getText();
					byte message[] = mess.getBytes();
					DatagramPacket packet = new DatagramPacket(message, message.length, address, pnum);
					socket.send(packet);
					area.setText("");
					//For Received message
					DatagramPacket packet1 = new DatagramPacket(message, message.length);
					socket.receive(packet1);
					String recmessage =new String(packet1.getData());
					area.append("Received from server: " + recmessage);
					socket.close();
				}
			}
			catch(IOException io){}
		}
	}
}