import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SimpleChatClient{
public final boolean verbose = true;
JTextArea incoming;
JTextField outgoing, name, to;
JLabel labelName, labelTo, labelMessage;
JCheckBox fancy, encrypt;
BufferedReader reader;
PrintWriter writer;
Socket sock;
String todayS, timeS, minS, secS;
Calendar now; int year,month,day,hour,min,sec;
public static void main(String args[]) throws IOException {
System.out.println("Chat Service");
SimpleChatClient Client = new SimpleChatClient();
Client.go();
}
public void go() {
JFrame frame = new JFrame(" Chat Client");
int sec = Integer.parseInt(processTime(3));
if( sec > 50 ) frame.setBackground(Color.blue);
else if( sec > 40 ) frame.setBackground(Color.magenta);
else if( sec > 30 ) frame.setBackground(Color.yellow);
else if( sec > 20 ) frame.setBackground(Color.red);
else if( sec > 10 ) frame.setBackground(Color.black);
else frame.setBackground(Color.green);
frame.setBounds(400+5*sec,8*sec,300,300);
JPanel mainPanel = new JPanel();
incoming = new JTextArea(15, 50);
incoming.setLineWrap(true);
incoming.setWrapStyleWord(true);
incoming.setEditable(false);
incoming.setText("Client logged on "+processTime(2) +"\n");
JScrollPane qScroller = new JScrollPane(incoming);
qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
outgoing = new JTextField(20);
name = new JTextField(20);
to = new JTextField(20);
JCheckBox fancy = new JCheckBox("Fancy", false);
JCheckBox encrypt = new JCheckBox("Encrypt", false);
labelName = new JLabel("NAME");
labelTo = new JLabel("TO");
labelMessage = new JLabel("Type Message Here:");
JButton sendButton = new JButton("Send");
sendButton.addActionListener(new SendButtonListener());
mainPanel.add(labelName);
mainPanel.add(name);
mainPanel.add(labelTo);
mainPanel.add(to);
mainPanel.add(fancy);
mainPanel.add(encrypt);
mainPanel.add(qScroller);
mainPanel.add(labelMessage);
mainPanel.add(outgoing);
mainPanel.add(sendButton);
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
setUpNetworking();
Thread readerThread = new Thread(new IncomingReader()); //thread to read incoming messages
readerThread.start();
frame.setSize(650, 500);
frame.setVisible(true);
}
public String processTime(int option){
now = Calendar.getInstance();
year = now.get(Calendar.YEAR);
month = now.get(Calendar.MONTH)+1;
day = now.get(Calendar.DAY_OF_MONTH);
hour = now.get(Calendar.HOUR);
min = now.get(Calendar.MINUTE);
sec = now.get(Calendar.SECOND);
if (min < 10 ) minS = "0" + min ; else minS = "" + min;
if (sec < 10 ) secS = "0" + sec ; else secS = "" + sec;
todayS = month + " / " + day + " / " + year;
timeS = hour + " : " + minS + " : " + secS;
switch(option) {
case (0): return todayS ;
case (1): return timeS;
case (2): return todayS + " @ " + timeS ;
case (3): return secS;
}
return null; // should not get here
}
private void setUpNetworking() {
try {if (verbose) System.out.println("Openning socket at port 5000");
sock = new Socket("127.0.0.1", 5001);
InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(sock.getOutputStream());
System.out.println("networking protocol established");
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
public class SendButtonListener implements ActionListener {
public void actionPerformed(ActionEvent ev) {
try {
String message = outgoing.getText();
if(verbose) System.out.println("Sending coded message ==>" + message);
writer.println(message);
writer.flush();
}
catch (Exception ex) {
ex.printStackTrace();
}
outgoing.setText("");
outgoing.requestFocus();
}
}
/** Internal class to handle the IncomingReader Handler
The benefit of using an internal class is that we have access to the various objects of the
external class
*/
class IncomingReader implements Runnable{
/**
* Method RUN to be executed when thred.start() is executed
*/
public void run() {
String message;
try {
while((message = reader.readLine()) != null) {
incoming.append(message + "\n");
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class ChatServer extends JFrame implements WindowListener{
Hashtable<String, SockAndWriter> toHash;
Vector<PrintWriter> clientOutputStreams;
BufferedReader reader;
Socket sock;
public final boolean verbose = true;
public JTextArea result = new JTextArea(20,30);
public JScrollPane jsp = new JScrollPane(result);
public Font f = new Font("Helvetica", Font.BOLD,16);
JLabel timeLabel = new JLabel("Date and Time ", JLabel.RIGHT);
JTextField timeField = new JTextField("");
JPanel displayTime = new JPanel(new GridLayout(1,2));
//JPanel panel = new JPanel(new BorderLayout());
int year,month,day,hour,min,sec;
String todayS, timeS, minS, secS;
Calendar now;
String recipient;
String originator;
String content;
boolean encrypt;
boolean fancyFrame;
public static void main(String args[]) {
System.out.println("Chat Service");
new ChatServer();
}
/** Constructor
*
*/
public String processTime(int option)
{ now = Calendar.getInstance();
year = now.get(Calendar.YEAR);
month = now.get(Calendar.MONTH)+1;
day = now.get(Calendar.DAY_OF_MONTH);
hour = now.get(Calendar.HOUR);
min = now.get(Calendar.MINUTE);
sec = now.get(Calendar.SECOND);
if (min < 10 ) minS = "0" + min ; else minS = "" + min;
if (sec < 10 ) secS = "0" + sec ; else secS = "" + sec;
todayS = month + " / " + day + " / " + year;
timeS = hour + " : " + minS + " : " + secS;
switch(option) {
case (0): return todayS ;
case (1): return timeS;
case (2): return todayS + " @ " + timeS ;
}
return null; // should not get here
}
public ChatServer() {
setLayout(new BorderLayout());
setTitle("Chat Server");
setSize(600, 800);
displayTime.add(timeLabel);displayTime.add(timeField);
timeLabel.setFont(f);
result.setFont(f);
add(displayTime,BorderLayout.NORTH);
add(result,BorderLayout.CENTER);
addWindowListener(this);
setVisible(true);
clientOutputStreams = new Vector<PrintWriter>();
toHash = new Hashtable<String, SockAndWriter>();
try {
ServerSocket serverSock = new ServerSocket(5001);
if (verbose) System.out.println(" Server IP 127.0.0.1. ready at port 5001 " );
if (verbose) System.out.println(" ___________________"
+"________________________________________________" );
result.append("Server started on " + processTime(2)+"\n");
if (verbose) { System.out.println ("\nStart Server on " + processTime(2));
timeField.setText(processTime(2));
}
while(true) {
Socket clientSocket = serverSock.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
System.out.println(" Connection " + writer);
clientOutputStreams.add(writer);
Thread t = new Thread(new ClientHandler(clientSocket));
t.start(); // to execute the run() method of ClientHandler
if(verbose) System.out.println("A new client has connected!");
}
} catch (Exception ex) { ex.printStackTrace(); }
}
/**
* Encrypts a command
* @param option
* @param true for encrypt, false for decrypt
* @param str String that is being encrypted/decrypted
* @return String to encrypted/decrypted
*/
public String EncodeDecode(boolean option, String str){
String x = "";
byte[] incoming = str.getBytes();
byte[] outgoing = new byte[incoming.length];
for(int i = 0; i < incoming.length; i++)
if(option) outgoing[i] = (byte)(incoming[i]+5);
else outgoing[i] = (byte)(incoming[i]-5);
x = new String(outgoing);
return x;
}
/** Internal class to handle the Client Handler
The benefit of using an internal class is that we have access to the various objects of the
external class
*/
public class ClientHandler implements Runnable {
/**
* Constructor of the inner class
* @param clientSocket
*/
public ClientHandler(Socket clientSocket) {
try {
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);
if (verbose) System.out.println("new client " );
if (verbose) System.out.println(" new client at address "
+ sock.getLocalAddress() + " at port " + sock.getLocalPort());
if (verbose) System.out.println(" Client at address "
+ sock.getInetAddress() + " at port " + sock.getPort() );
if (verbose) System.out.println(" ___________________"
+"________________________________________________" );
clientOutputStreams = new Vector<PrintWriter>();
toHash = new Hashtable<String, SockAndWriter>();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public void tellEveryone(String message) {
Iterator<PrintWriter> it = clientOutputStreams.iterator();
result.append(message + " broadcasted on " + processTime(2)+ "\n");
System.out.println( " has Next " + it.hasNext());
while (it.hasNext()) {
try {
PrintWriter writer = (PrintWriter) it.next();
System.out.println("all message" + message);
writer.println(message);
writer.flush();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void tellSomeone(String to, String message) {
System.out.println(message + " sent to " + to + "\n");
result.append(message + " sent on " + processTime(2) + "\n");
try {
Socket sock = toHash.get(to).s;
String name = toHash.get(to).name;
PrintWriter writer = toHash.get(to).pw;
System.out.println(name + " message to be sent to " + to);
System.out.println(">>>>>>>ht " + to + " " + writer.toString());
writer.println(message);
writer.flush();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public void closeEverything(Socket sock, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
try {
if(bufferedReader != null) {
bufferedReader.close();
}
if(bufferedWriter != null) {
bufferedWriter.close();
}
if(sock != null) {
sock.close();
}
}
catch(IOException e) {
e.printStackTrace();
}
}
/**
* Method RUN to be executed when thread.start() is executed
*/
public void run() {
String messageFromClient, to;
try {
while ((messageFromClient = reader.readLine()) != null) {
System.out.println(" message recieved " + messageFromClient);
to = anaMess(messageFromClient);
System.out.println( " telling " + messageFromClient + " To " + to);
if (to.equals("ALL")) tellEveryone(messageFromClient);
else tellSomeone(to, messageFromClient);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* while(sock.isConnected()) {
* try{
* messageFromClient = bufferedReader.readLine();
* }
* }
*
*/
public String anaMess(String message) throws Exception {
String element;
PrintWriter writer = new PrintWriter(sock.getOutputStream());
content = "";
result.append("message recieved " + message + " on " + processTime(2) + "\n");
StringTokenizer st = new StringTokenizer(message);
while(st.hasMoreElements()) {
element = st.nextToken();
if(element.equals("NAME")) {
originator = st.nextToken();
SockAndWriter sw = new SockAndWriter(originator, sock, writer);
toHash.put(originator, sw);
System.out.println("!ht " + originator + " " + sock.toString());
}
else if(element.equals("TO")) recipient = st.nextToken();
else if(element.equals("MESS")) {
while(st.hasMoreElements()) {
content = content + " " + st.nextToken();
}
}
else if(element.equals("ENC")) {
if((st.nextToken()).equals("true")) {
encrypt = true;
}
else {
encrypt = false;
}
}
else if(element.equals("FANCY")) {
if((st.nextToken()).equals("true")) {
fancyFrame = true;
}
else {
fancyFrame = false;
}
}
//System.out.println("token is " + element);
}
return content;
}
}
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
I am currently working on a multi client-server system that allows for any number of clients to access a chat server and send messages back and fourth to each other. However, I am running into issues.
First, I need to give the the clients the option to send their chat messages to EVERYONE in the server or just ONE individual. I have already created the code necessary for that in my "ChatServer" Java Class but do not know how to connect that code to the "SimpleChatServer" Java Class itself.
Next, I need to give the clients the option to encrypt their message before they send it as well as the option to send a message with a sound and image along with it, as sort of a "fancy" way of messaging someone. I've decided to use JCheckBoxes and implement them into the JFrame. The idea is that if the "Encrypt" checkbox is selected, the message will be ecrytped, and if the "Fancy" checkbox is selected, the message will contain a sound and image (that will already be a part of the program's files) so when the message is recieved by the recipient, both will play. Unfortunately, I do not know how to implement those two things.
I've sent you all that I've done so far and would greatly appreciate your assistance. I understand this may be alot to ask, but any and all help would be appreciated!
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem i
sectetur adipiscing eliUnlock access to this and over
10,000 step-by-step explanations
Have an account? Log In
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec f
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapib
secte
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam laciniaUnlock access to this and over
10,000 step-by-step explanations
Have an account? Log In
sectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lacinia pulvinar tortor nec facilisis. Pellentesque dapibus efficitur laoreet. Nam risus ante, dapibus a molestie consequat, ultrices ac magna. Fusce dui lectus, congue vel laoreet ac, dictum vitae odio. Donec aliquet. Lorem ipsum dolor sit amet, consectetu