Created
April 12, 2016 08:56
-
-
Save tandat2209/ece99b2718e4d6b810783018a78a2932 to your computer and use it in GitHub Desktop.
Chat multi client - two thread read and write
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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