Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java Networking Assignment I need help creating a UDP chat program in Java. You

ID: 3606845 • Letter: J

Question

Java Networking Assignment

I need help creating a UDP chat program in Java. You will have a seperate window for each person you are communicating with. The window will have as a title the IP address and port number of the person you are messaging with. You will have a main window that allows you to initiate messaging sessions with other people based on their IP address and port number. Once you initiate a new messaging session, you will create a new window for that session. This window should also have a button to exit the program.You will still have the receiving Thread which will handle all the incoming messages. However, your code will also keep track of the source IP addresses and port number along with the window containing that messaging session. If the source IP address and port number combination is a new one, you will have to open a new messaging window. Otherwise, the incoming message will be displayed in the existing window for that source IP address.

Each window will have the following components:

The title of the window should be the IP address and port number of the other side of the messaging session.

A section to display the messaging interaction. This window should contain the messages from both you and the person you are messaging with.

A section for you to type your reply.

A button to send your reply.

A button the close and end the messaging session.

Explanation / Answer

Solution:

code:

demo.java

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.net.*;

import java.io.*;

import java.util.*;

import server.Message;

class Message1 implements Serializable

{

public volatile String senderID;

public volatile String msgText;

}

class client extends JFrame implements ActionListener,Runnable

{

//Initialization of the Swing Components

Socket socket = null;

JLabel l1,l2,l3,l4,l5,l6,jtf3;

JTextField jtf1,jtf2,jtf4,jtf5;

TextArea ta;

Message msg = new Message();

InetAddress host;

int port = 5000;

Thread t = null;

JButton jb,jb2,jb3;

client(String s)

{

super(s);

myadapter a = new myadapter(this);

addWindowListener(a);

l5 = new JLabel("Enter IP : ");

add(l5);

jtf4 = new JTextField(15);

add(jtf4);

jtf4.setText("127.0.0.1");

add(new JLabel(" "));

l6 = new JLabel("Enter Port : ");

add(l6);

jtf5 = new JTextField(15);

add(jtf5);

jtf5.setText("5000");

l1 = new JLabel("Nick Name : ");

add(l1);

jtf1 = new JTextField(15);

add(jtf1);

jb2 = new JButton("Connect");

add(jb2);

jb2.addActionListener(this);

jb3 = new JButton("Disconnect");

add(jb3);

jb3.addActionListener(this);

jb3.setEnabled(false);

add(new JLabel(" "));

l2 = new JLabel("Message : ");

add(l2);

jtf2 = new JTextField(34);

add(jtf2);

jtf2.setEditable(false);

jb = new JButton("Send Message");

add(jb);

jb.addActionListener(this);

jb.setEnabled(false);

l3 = new JLabel("Status : ");

add(l3);

jtf3 = new JLabel("Not connected to the server...");

add(jtf3);

add(new JLabel(" "));

l4 = new JLabel("Recieved Messages : ");

add(l4);

ta = new TextArea("",15,80);

add(ta);

ta.setFont(Font.getFont("verdana"));

ta.setBackground(Color.YELLOW);

ta.setEditable(false);

jtf3.setText("Not connected to Server, click connect");

}

public void actionPerformed(ActionEvent ae)

{

// Trying to connect to the server

try{

String str = ae.getActionCommand();

if(str.equals("Disconnect"))

{

try

{

jb.setEnabled(false);

jtf2.setEditable(false);

jb2.setEnabled(true);

jb3.setEnabled(false);

jtf4.setEditable(true);

jtf5.setEditable(true);

jtf1.setEditable(true);

socket.close();

socket = null;

}

catch(Exception e)

{

}

}

if(str.equals("Send Message")) // Sending message to server after establishing the connection

{

msg.senderID = jtf1.getText();

msg.msgText = jtf2.getText();

jtf2.setText("");

if(!msg.senderID.equals("") && !msg.msgText.equals("")) // Message fails

{

sendData();

}

else

jtf3.setText("Message was not sent, type a message");

}

if(str.equals("Connect"))

{

try{

host = InetAddress.getByName(jtf4.getText());

String p = jtf5.getText();

try{

if(socket!=null)

{

socket.close();

socket = null;

}

}

catch(Exception e)

{}

if(!jtf1.getText().equals("")) // Displaying the connection on the server

{

socket = new Socket(host,Integer.parseInt(p));

ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());

msg.senderID = jtf1.getText();

msg.msgText = " is now online at "+new Date().toString();

obj.writeObject(msg);

jtf2.setEditable(true);

jb.setEnabled(true);

jb2.setEnabled(false);

jb3.setEnabled(true);

jtf4.setEditable(false);

jtf5.setEditable(false);

jtf1.setEditable(false);

jtf3.setText("Connection established with Server, start chatting");

t = new Thread(this,"Reading");

t.start();

}

}

catch(Exception e) // Failed to load on the server

{

jtf3.setText("Could not connect to Server, connect again");

}

}

}

catch(Exception e)

{

jtf3.setText("Action Error");

}

}

// Sending data to the server and checking whether the connection is strong or not

public void sendData()

{

try

{

ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());

if(!msg.senderID.equals("") && !msg.msgText.equals(""))

{

obj.writeObject(msg);

jtf3.setText("Message was sent successfully");

}

msg.senderID = "";

msg.msgText = "";

}

catch(Exception e)

{

jtf3.setText("Error occured while sending message");

}

}

// Establishing Connection once it is lost

public void run()

{

try

{

while(true)

{

ObjectInputStream obj = new ObjectInputStream(socket.getInputStream());

Message msg = new Message();

msg = (Message) obj.readObject();

if(msg.senderID!=null && msg.msgText!=null)

ta.append(msg.senderID+" >> "+msg.msgText+" ");

}

}

catch(Exception e)

{

jtf2.setEditable(false);

jb2.setEnabled(true);

jb.setEnabled(false);

jb3.setEnabled(false);

jtf4.setEditable(true);

jtf5.setEditable(true);

jtf1.setEditable(true);

jtf3.setText("Connection Lost");

}

}

}

// main Class calling

class demo

{

public static void main(String args[])

{

client f = new client("Messenger by m@5t3r_c0d3r");

f.setLayout(new FlowLayout());

f.setSize(600,425);

f.setResizable(false);

f.setVisible(true);

}

}

// Client side request to the server

class myadapter extends WindowAdapter

{

client f;

public myadapter(client j)

{

f = j;

}

public void windowClosing(WindowEvent we)

{

f.setVisible(false);

try

{

f.socket.close();

f.dispose();

}

catch(Exception e)

{

}

System.exit(0);

}

}

server.java

import java.net.*;

import java.io.*;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

// Initializing the data required for Establishing Connection

class Message implements Serializable

{

public volatile String senderID;

public volatile String msgText;

}

class data

{

public volatile int signal;

public volatile int count;

}

// Initializing the sockets and ports used to establish connection

class ser extends JFrame implements ActionListener,Runnable

{

Thread t;

JButton a,b;

JTextField jtf2;

JLabel jtf;

TextArea ta;

ServerSocket server;

Message msg = new Message();

data flag = new data();

Socket count[] = new Socket[5];

int cj = 5;

int cl = 0;

// Swing GUI initialization

ser(String s)

{

super(s);

flag.signal = 0;

flag.count = 0;

JLabel l3 = new JLabel("Enter Port No. : ");

add(l3);

jtf2 = new JTextField(7);

jtf2.setText("5000");

add(jtf2);

JLabel l1 = new JLabel("Start the Server");

add(l1);

a = new JButton("Start");

a.addActionListener(this);

add(a);

JLabel l2 = new JLabel("Stop the Server");

add(l2);

b = new JButton("Stop");

b.addActionListener(this);

add(b);

b.setEnabled(false);

JLabel l4 = new JLabel("Status : ");

add(l4);

add(new JLabel(" "));

jtf = new JLabel("Server is not running...");

add(jtf);

ta = new TextArea("",15,70);

ta.setEditable(false);

ta.setBackground(Color.WHITE);

ta.setFont(Font.getFont("verdana"));

add(ta);

mywindowadapter a = new mywindowadapter(this);

addWindowListener(a);

}

// Performing a server start for receiving connections

public void actionPerformed(ActionEvent ae)

{

try{

String str = ae.getActionCommand();

if(str.equals("Start"))

{

String str2 = jtf2.getText();

if(!str2.equals(""))

{

try

{

server = new ServerSocket(Integer.parseInt(str2));

jtf.setText("Server is running....");

jtf2.setEnabled(false);

a.setEnabled(false);

b.setEnabled(true);

flag.count = 0;

count = new Socket[5];

cj = 5;

cl = 0;

t = new Thread(this,"Running");

t.start();

}

catch(Exception e) // Port Invalid Exception

{

jtf.setText("Either the port no. is invalid or is in use");

}

}

else

jtf.setText("Enter port no.");

}

if(str.equals("Stop")) // Trying to Stop the server

{

try{

server.close();

}

catch(Exception ee)

{

jtf.setText("Error closing server");

}

jtf.setText("Server is closed");

jtf2.setEnabled(true);

a.setEnabled(true);

b.setEnabled(false);

server = null;

t = null;

for(int i=0;i<flag.count;i++)

{

try{

count[i].close();

}

catch(Exception e)

{

}

}

}

}

catch(Exception ex)

{

}

}

public void run()

{ while(true)

{

if(!server.isClosed())

{

jtf.setText("Server Running.....");

}

else

{

jtf.setText("Server Closed....");  

}

try{

Socket client = server.accept();

ObjectInputStream obj = new ObjectInputStream(client.getInputStream());

msg = (Message) obj.readObject();

ta.append(msg.senderID+" >> "+msg.msgText+" ");

if(cl<cj)

{

count[cl] = client;

cl++;

}

else

{

Socket temp[] = new Socket[cj];

for(int i=0;i<cj;i++)

{

temp[i] = count[i];

}

count = new Socket[cj+5];

for(int i=0;i<cj;i++)

{

count[i] = temp[i];

}

count[cj] = client;

cj = cj+5;

cl++;

}

flag.count = cl;

for(int i=0;i<flag.count;i++)

{

try{

ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());

objw.writeObject(msg);

}catch(Exception e)

{}

}

new newthread(client,msg,flag,count,this,server);

}

catch(Exception e)

{

jtf.setText("Server is stopped");

jtf2.setEnabled(true);

try{

server.close();

}

catch(Exception ey)

{

jtf.setText("Error closing server");

}

}

}

}

}

class server

{

public static void main(String args[])throws IOException

{

ser f = new ser("Chat Server by m@5t3r_c0d3r");

f.setLayout(new FlowLayout());

f.setSize(550,365);

f.setResizable(false);

f.setVisible(true);

}

}

class newthread implements Runnable

{

Thread t;

Socket client;

Message msg;

data flag;

Socket count[];

ser f;

ServerSocket server;

newthread(Socket client,Message msg,data flag,Socket count[],ser f,ServerSocket server)

{

t = new Thread(this,"Client");

this.server = server;

this.client = client;

this.msg = msg;

this.f = f;

this.flag = flag;

this.count = count;

t.start();

}

public void run()

{

String name = msg.senderID;

try

{

while(server.isClosed()!=true)

{

ObjectInputStream obj = new ObjectInputStream(client.getInputStream());

msg = (Message)obj.readObject();

if(msg.senderID!=null && msg.msgText!=null)

{

f.ta.append(msg.senderID+" >> "+msg.msgText+" ");

}

name = msg.senderID;

for(int i=0;i<flag.count;i++)

{

try

{

ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());

objw.writeObject(msg);

}

catch(Exception e)

{

}

}

}

if(server.isClosed())

{

for(int i=0;i<flag.count;i++)

{

try{

count[i].close();

}

catch(Exception e)

{

}

}

}

}

catch(Exception e)

{

f.ta.append(name+" is offline ");

try

{

msg.msgText = " is offline ";

for(int i=0;i<flag.count;i++)

{

try

{

ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());

objw.writeObject(msg);

}

catch(Exception ex)

{

}

}

client.close();

}

catch(Exception ex)

{

}

}

}

}

class mywindowadapter extends WindowAdapter

{

ser f;

public mywindowadapter(ser j)

{

f = j;

}

public void windowClosing(WindowEvent we)

{

f.setVisible(false);

try

{

f.server.close();

}

catch(Exception e)

{

}

f.dispose();

System.exit(0);

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote