Server.java
~~~~~~~~~~
//Simple Chat Demo With Error Check - (client to client)(Java)
// Server.java
package com.chat.test;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
* Simple Chat Demo with error check server side
*
*
*/
public class Server {
private boolean running;
private ServerSocket ss;
private Socket s;
/*
* use ArrayList to store all connect client
*/
private List<Client> clients = new ArrayList<Client>();
/*
* construct method create server and wait client connect
*/
public Server(int port) throws IOException {
ss = new ServerSocket(port);
System.out.println("server start!");
running = true;
/*
* wait client connect
*/
while (running) {
s = ss.accept();
/*
* when client connect, add it to clients list and create new thread
* to access it
*/
Client c = new Client(s);
clients.add(c);
System.out.println("connect new client!");
System.out.println("client numbers: " + clients.size());
new Thread(c).start();
}
}
/*
* client access thread
*/
private class Client implements Runnable {
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
private boolean isConnected;
/*
* construct method, get input stream and output stream
*/
public Client(Socket socket) throws IOException {
this.socket = socket;
InputStream is = socket.getInputStream();
dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
dos = new DataOutputStream(os);
isConnected = true;
}
/*
* use output stream send text to client
*/
public void send(String text) {
try {
dos.writeUTF(text);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* run method
*
* @see java.lang.Runnable#run()
*/
public void run() {
/*
* get remote address and port
*/
InetSocketAddress address = (InetSocketAddress) socket
.getRemoteSocketAddress();
String host = address.getHostName();
int port = address.getPort();
/*
* if connected, wait client send message to server.
*/
while (isConnected) {
try {
String text = dis.readUTF();
System.out.println("Get " + host + ":" + port
+ " Message: " + text);
/*
* Iterator clients list, send get text to all client use
* test remote address method, to control text not send to
* sender
*/
for (Client c : clients) {
if (!c.socket.getRemoteSocketAddress().equals(address))
c.send(text);
}
} catch (IOException e) {
/*
* if readInput stream error occurs, then client
* disconnected. close all client connect resource.
*/
if (dis != null)
try {
dis.close();
dos.close();
socket.close();
isConnected = false;
clients.remove(this);
System.out.println("disconnect client!");
System.out.println("Client numbers: "
+ clients.size());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
/*
* server main method create new server at 4444 port
*/
public static void main(String[] args) {
try {
new Server(4444);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client.java
~~~~~~~~~~~~
package com.chat.test;
import java.awt.BorderLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* Simple Chat Demo with error check client side
*
*
*/
public class Client extends JFrame implements ActionListener {
private JTextArea textArea;
private TextField textField;
private newClient client;
private JButton button;
public Client() {
init();
}
/*
* create client windows
*/
private void init() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(200, 200, 400, 300);
setTitle("Client");
/*
* add textArea to show message
*/
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
add(new JScrollPane(textArea));
/*
* add send textField and sendButton to send message
*/
JPanel panel = new JPanel(new BorderLayout());
add(panel, BorderLayout.SOUTH);
textField = new TextField();
textField.addActionListener(this);
panel.add(textField);
button = new JButton();
button.addActionListener(this);
panel.add(button, BorderLayout.EAST);
/*
* connect to server
*/
connect();
}
/*
* action access method, send text to server
*/
public void actionPerformed(ActionEvent e) {
String text = textField.getText();
textArea.append("Send: ");
textArea.append(text);
textArea.append("\n");
textField.setText("");
textField.requestFocus();
/*
* client send message to server
*/
client.send(text);
}
/*
* connect to server
*/
public void connect() {
try {
Socket socket = new Socket("127.0.0.1", 4444);
System.out.println("client start");
/*
* create new thread to access connection
*/
client = new newClient(socket);
new Thread(client).start();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* add text to textArea
*/
public void append(String text) {
textArea.append(text);
textArea.append("\n");
}
/*
* connect access method
*/
class newClient implements Runnable {
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
private boolean isConnect;
/*
* construct method, get input stream and output stream
*/
public newClient(Socket socket) {
this.socket = socket;
isConnect = true;
try {
InputStream is = socket.getInputStream();
dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
dos = new DataOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* send textField's text to server
*/
public void send(String text) {
try {
dos.writeUTF(text);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* thread access method
*/
public void run() {
/*
* get remote address
*/
InetSocketAddress address = (InetSocketAddress) socket
.getRemoteSocketAddress();
String host = address.getHostName();
int port = address.getPort();
/*
* wait server send text, if get text from server, add text to
* textArea
*/
while (isConnect) {
try {
String text = dis.readUTF();
append("Get From " + host + ":" + port + " Message: "
+ text);
} catch (IOException e) {
/*
* if readInput stream error occurs, then server is
* disconnect, release all connect resources
*/
System.out.println("server closed");
try {
dis.close();
dos.close();
isConnect = false;
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}// end while
}
}
/*
* main method create new server
*/
public static void main(String[] args) {
new Client().setVisible(true);
}
}
~~~~~~~~~~
//Simple Chat Demo With Error Check - (client to client)(Java)
// Server.java
package com.chat.test;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
* Simple Chat Demo with error check server side
*
*
*/
public class Server {
private boolean running;
private ServerSocket ss;
private Socket s;
/*
* use ArrayList to store all connect client
*/
private List<Client> clients = new ArrayList<Client>();
/*
* construct method create server and wait client connect
*/
public Server(int port) throws IOException {
ss = new ServerSocket(port);
System.out.println("server start!");
running = true;
/*
* wait client connect
*/
while (running) {
s = ss.accept();
/*
* when client connect, add it to clients list and create new thread
* to access it
*/
Client c = new Client(s);
clients.add(c);
System.out.println("connect new client!");
System.out.println("client numbers: " + clients.size());
new Thread(c).start();
}
}
/*
* client access thread
*/
private class Client implements Runnable {
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
private boolean isConnected;
/*
* construct method, get input stream and output stream
*/
public Client(Socket socket) throws IOException {
this.socket = socket;
InputStream is = socket.getInputStream();
dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
dos = new DataOutputStream(os);
isConnected = true;
}
/*
* use output stream send text to client
*/
public void send(String text) {
try {
dos.writeUTF(text);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* run method
*
* @see java.lang.Runnable#run()
*/
public void run() {
/*
* get remote address and port
*/
InetSocketAddress address = (InetSocketAddress) socket
.getRemoteSocketAddress();
String host = address.getHostName();
int port = address.getPort();
/*
* if connected, wait client send message to server.
*/
while (isConnected) {
try {
String text = dis.readUTF();
System.out.println("Get " + host + ":" + port
+ " Message: " + text);
/*
* Iterator clients list, send get text to all client use
* test remote address method, to control text not send to
* sender
*/
for (Client c : clients) {
if (!c.socket.getRemoteSocketAddress().equals(address))
c.send(text);
}
} catch (IOException e) {
/*
* if readInput stream error occurs, then client
* disconnected. close all client connect resource.
*/
if (dis != null)
try {
dis.close();
dos.close();
socket.close();
isConnected = false;
clients.remove(this);
System.out.println("disconnect client!");
System.out.println("Client numbers: "
+ clients.size());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
/*
* server main method create new server at 4444 port
*/
public static void main(String[] args) {
try {
new Server(4444);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Client.java
~~~~~~~~~~~~
package com.chat.test;
import java.awt.BorderLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* Simple Chat Demo with error check client side
*
*
*/
public class Client extends JFrame implements ActionListener {
private JTextArea textArea;
private TextField textField;
private newClient client;
private JButton button;
public Client() {
init();
}
/*
* create client windows
*/
private void init() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(200, 200, 400, 300);
setTitle("Client");
/*
* add textArea to show message
*/
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setLineWrap(true);
add(new JScrollPane(textArea));
/*
* add send textField and sendButton to send message
*/
JPanel panel = new JPanel(new BorderLayout());
add(panel, BorderLayout.SOUTH);
textField = new TextField();
textField.addActionListener(this);
panel.add(textField);
button = new JButton();
button.addActionListener(this);
panel.add(button, BorderLayout.EAST);
/*
* connect to server
*/
connect();
}
/*
* action access method, send text to server
*/
public void actionPerformed(ActionEvent e) {
String text = textField.getText();
textArea.append("Send: ");
textArea.append(text);
textArea.append("\n");
textField.setText("");
textField.requestFocus();
/*
* client send message to server
*/
client.send(text);
}
/*
* connect to server
*/
public void connect() {
try {
Socket socket = new Socket("127.0.0.1", 4444);
System.out.println("client start");
/*
* create new thread to access connection
*/
client = new newClient(socket);
new Thread(client).start();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* add text to textArea
*/
public void append(String text) {
textArea.append(text);
textArea.append("\n");
}
/*
* connect access method
*/
class newClient implements Runnable {
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
private boolean isConnect;
/*
* construct method, get input stream and output stream
*/
public newClient(Socket socket) {
this.socket = socket;
isConnect = true;
try {
InputStream is = socket.getInputStream();
dis = new DataInputStream(is);
OutputStream os = socket.getOutputStream();
dos = new DataOutputStream(os);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* send textField's text to server
*/
public void send(String text) {
try {
dos.writeUTF(text);
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* thread access method
*/
public void run() {
/*
* get remote address
*/
InetSocketAddress address = (InetSocketAddress) socket
.getRemoteSocketAddress();
String host = address.getHostName();
int port = address.getPort();
/*
* wait server send text, if get text from server, add text to
* textArea
*/
while (isConnect) {
try {
String text = dis.readUTF();
append("Get From " + host + ":" + port + " Message: "
+ text);
} catch (IOException e) {
/*
* if readInput stream error occurs, then server is
* disconnect, release all connect resources
*/
System.out.println("server closed");
try {
dis.close();
dos.close();
isConnect = false;
socket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}// end while
}
}
/*
* main method create new server
*/
public static void main(String[] args) {
new Client().setVisible(true);
}
}
No comments:
Post a Comment