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

Java or C program multi-client chat server. A program that is a server. The serv

ID: 3711562 • Letter: J

Question

Java or C program multi-client chat server.

A program that is a server. The server must be able to handle up to 5 clients at the same time. It says when a new client has connected to the chat server. When one client sends a message to the server the server in return sends the message to every other client that is connected. And once all the clients are done talking it tells when the client leaves the chat program. Nothing fancy just has to do what it says above. Can use whatever gets the job done.

Explanation / Answer

server:

import java.net.ServerSocket;

import java.net.Socket;

public class ThreadedCommandServer {

public static void main(String[] args) throws Exception {

System.out.println("Starting server....");

int port = 8989;

ServerSocket ss = new ServerSocket(port);

while(true) {

System.out.println("Waiting for connection from client...");

Socket socket = ss.accept();

ServerThread st = new ServerThread(socket);

st.start();

}

}

}

server thread:

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.net.Socket;

public class ServerThread extends Thread {

private Socket socket = null;

private String s;

public ServerThread(Socket s) {

socket = s;

}

public void run() {

try {

InputStream is = socket.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);

s = (String) ois.readObject();

System.out.println("received string: " + s);

OutputStream os = socket.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(os);

oos.writeObject(s);

System.out.println("sent object back to client...");

} catch (Exception e) {

System.out.println(e.toString());

}

}

}

client:

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.net.InetAddress;

import java.net.Socket;

public class Controller {

private ClientFrame cf;

private String message;

private Socket socket;

private String response;

public Controller(ClientFrame cf) {

this.cf = cf;

}

public void sendChat(String s) {

message = s;

System.out.println("FROM CONTROLLER: received: " + message);

try {

InetAddress i = InetAddress.getByName("localhost");

socket= new Socket(i, 8989);

OutputStream os = socket.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(os);

System.out.println("FROM CONTROLLER: sending message to the server...");

oos.writeObject(message);

InputStream is = socket.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);

System.out.println("getting string back from server....");

response = (String) ois.readObject();

cf.updateGUI(response);

}

catch (Exception e) {

e.printStackTrace();

}

}

}

GUI:

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class ClientFrame extends JFrame {

private JTextArea chatArea;

private JTextField type;

private JButton submit;

private JPanel upper;

private JPanel lower;

private BorderLayout bl;

JScrollPane jsp;

Controller c;

public ClientFrame() {

bl = new BorderLayout();

upper = new JPanel();

lower = new JPanel();

chatArea = new JTextArea("chat goes here", 20, 30);

c = new Controller(this);

chatArea.setEditable(false);

chatArea.setLineWrap(true);

type = new JTextField("type here", 20);

jsp = new JScrollPane(chatArea);

new SmartScroller(jsp);

lower.add(type);

submit = new JButton("send");

submit.addActionListener(new Submit());

type.addActionListener(new Submit());

lower.add(submit);

upper.add(jsp);

this.setSize(400, 600);

this.setLayout(bl);

this.setTitle("MattChatt");

this.add(upper, BorderLayout.NORTH);

this.add(lower, BorderLayout.SOUTH);

this.setVisible(true);

this.setResizable(false);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public void updateGUI(String s) {

chatArea.append(" " + s);

}

private class Submit implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

if (type.getText().equals("")) {

System.out.println("no text entered");

} else {

System.out.println("submitted");

c.sendChat(type.getText());

type.setText("");

}

}

}

}

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