Skip to content

Instantly share code, notes, and snippets.

@tandat2209
Created April 12, 2016 08:56
Show Gist options
  • Save tandat2209/ece99b2718e4d6b810783018a78a2932 to your computer and use it in GitHub Desktop.
Save tandat2209/ece99b2718e4d6b810783018a78a2932 to your computer and use it in GitHub Desktop.
Chat multi client - two thread read and write
package multithreadedchat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client extends Thread{
Socket socket;
final String host = "localhost";
final int port = 8888;
@Override
public void run() {
super.run();
try {
socket = new Socket(host, port);
new Thread(new ClientRecieveThread(socket)).start();
new Thread(new ClientSendThread(socket)).start();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new Client().start();
}
}
class ClientSendThread implements Runnable{
PrintWriter writer;
String line;
public ClientSendThread(Socket socket) {
try {
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.print("> ");
try {
line = input.readLine();
writer.println(line);
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class ClientRecieveThread implements Runnable{
BufferedReader reader;
String line;
public ClientRecieveThread(Socket socket) {
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
while((line = reader.readLine())!= null){
System.out.println("\nServer: " + line);
System.out.print("> ");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package multithreadedchat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
public static void main(String[] args) {
ArrayList<Socket> clients = new ArrayList<>();
Thread send = null;
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server is running on " + serverSocket.getLocalPort());
Socket socket;
while((socket = serverSocket.accept())!=null){
clients.add(socket);
System.out.println("\nClient"+socket.getPort()+" connected. NoC: "+clients.size());
new Thread(new ServerRecieveThread(socket)).start();
if(send!=null && send.isAlive()) send.interrupt();
send = new Thread(new ServerSendThread(clients));
send.start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ServerRecieveThread implements Runnable{
BufferedReader reader;
String line;
Socket socket;
public ServerRecieveThread(Socket socket) {
this.socket = socket;
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
while((line=reader.readLine())!= null){
System.out.println("\nClient["+ socket.getPort() + "]: " + line);
System.out.print("> ");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ServerSendThread implements Runnable{
PrintWriter writer;
String line;
ArrayList<PrintWriter> writers = new ArrayList<>();
public ServerSendThread(ArrayList<Socket> clients) {
try {
for(Socket socket: clients){
writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writers.add(writer);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
while(!Thread.currentThread().isInterrupted()){
System.out.print("> ");
try {
line = input.readLine();
System.out.println(writers.size());
for(PrintWriter writer: writers){
writer.println(line);
writer.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment