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

So, the task will create a server and client and send a message from the client

ID: 3860054 • Letter: S

Question

So, the task will create a server and client and send a message from the client to the server. We will have two classes

NetworkClient and NetworkServerListener classes.

These will each have a main to run from the command line

The NetworkServerListener class will listen for a client connection from NetworkClient , receive a message, display the message to the console (stdout) and exit.

The NetworkClient class will create a connection to the NetworkServerListener and send a message to the server and exit.

We must use try and catch blocks as appropriate. there should be one or more try/catch blocks in that method if it throws an exception. It may be appropriate to "pass" the exception to the calling method but some method in the call stack must handle the exception. We cannot let it bubble up to the virtual machine and have our application abnormally terminated.

Thanks

Explanation / Answer

The program uses the java.net library.Hope this will help

Demo.java

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package server;

/**

*

* @author Akshay Bisht

*/

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) // Creating UI of the Client standalone

{

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

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package server;

/**

*

* @author Akshay Bisht

*/

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);

}

}

Please rate the answer if it helped......Thankyou

Hope it helps....

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