Server.java
import java.io.*;
import java.net.*;
public class Server implements Runnable {
String messageIN, messageOUT;
Thread t1 = null, t2 = null;
BufferedReader b1, b2;
ServerSocket ss;
Socket s;
PrintWriter p1;
Server() {
try {
ss = new ServerSocket(8000);
System.out.println();
System.out.println("Server is Waiting . . . . . ");
s = ss.accept();
System.out.println();
System.out.println("Client Connected ! ! ! ");
t1 = new Thread(this);
t2 = new Thread(this);
t1.start();
t2.start();
} catch (Exception e) {
System.out.println(e);
}
}
//----------------------------------------------------------------------------------------
public void run() {
if (Thread.currentThread() == t1) {
try {
b1 = new BufferedReader(new InputStreamReader(System.in));
p1 = new PrintWriter(s.getOutputStream(), true);
do {
System.out.println();
messageIN = b1.readLine();
System.out.println("Server Says : : : "+messageIN);
p1.println(messageIN);
} while (!messageIN.equals("END"));
} catch (Exception ex) {
}
} else {
try {
b2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
do {
messageOUT = b2.readLine();
System.out.println("Client Says : : : " + messageOUT);
System.out.println();
} while (!messageOUT.equals("END"));
} catch (Exception e) {
}
}
}
//----------------------------------------------------------------------------------------
public static void main(String[] args) {
new Server();
}
}
//-----------------------------------------------------------------------------------------
Client.java
import java.io.*;
import java.net.*;
public class Client implements Runnable {
String messageIN, messageOUT;
Thread thread1 = null, thread2 = null;
BufferedReader br1, br2;
Socket s;
PrintWriter pw;
Client() {
try {
System.out.println();
System.out.println("Going to connect to Server");
s = new Socket("localhost", 8000);
System.out.println();
System.out.println("Connected");
thread1 = new Thread(this);
thread2 = new Thread(this);
thread1.start();
thread2.start();
} catch (Exception ex) {
System.out.println("ex = " + ex);
}
}
//-----------------------------------------------------------------------------------------
public void run() {
if (Thread.currentThread() == thread2) {
try {
br1 = new BufferedReader(new InputStreamReader(System.in));
do {
System.out.println();
messageIN = br1.readLine();
System.out.println("Client Says : : "+messageIN);
pw = new PrintWriter(s.getOutputStream(), true);
pw.println(messageIN);
} while (!messageIN.equals("END"));
} catch (Exception ex) {
}
} else {
try {
do {
br2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
messageOUT = br2.readLine();
System.out.println("Server Says : : : " + messageOUT);
System.out.println();
} while (!messageOUT.equals("END"));
} catch (Exception e) {
}
}
}
//----------------------------------------------------------------------------------------
public static void main(String[] args) {
new Client();
}
}
acceptorreceive) will block and wait for an incoming connection (if ServerSocket) or an incoming datagram (if DatagramSocket). So in that case "waiting" is okay with me. (download.oracle.com/javase/tutorial/networking/sockets/…)