Server Code
package socket;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Server {
private ServerSocket serverSocket;
private Socket clientSocket;
private BufferedReader socketReader;
private PrintWriter socketWriter;
public static void main(String[] args) {
new Server().start();
}
public void start() {
try {
serverSocket = new ServerSocket(8880);
System.out.println("Waiting for incoming connections");
clientSocket = serverSocket.accept();
System.out.println("Client connected");
socketReader = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
socketWriter = new PrintWriter(clientSocket.getOutputStream(), true);
new Thread(new ClientMessageHandler()).start();
Scanner scanner = new Scanner(System.in);
String message;
while (true) {
message = scanner.nextLine();
socketWriter.println(message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeServer();
}
}
public void closeServer() {
try {
socketReader.close();
socketWriter.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class ClientMessageHandler implements Runnable {
public void run() {
try {
String message;
while ((message = socketReader.readLine()) != null) {
System.out.println(message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client Code:
package socket;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Client {
private Socket socket;
private BufferedReader socketReader;
private PrintWriter socketWriter;
public static void main(String[] args) {
new Client().start();
}
public void start() {
try {
socket = new Socket("localhost", 8880);
System.out.println("Connecting to the server");
socketReader = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
socketWriter = new PrintWriter(socket.getOutputStream(), true);
new Thread(new ServerMessageHandler()).start();
Scanner scanner = new Scanner(System.in);
String message;
while (true) {
message = scanner.nextLine();
socketWriter.println("client: " + message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeClient();
}
}
public void closeClient() {
try {
socketReader.close();
socketWriter.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class ServerMessageHandler implements Runnable {
public void run() {
try {
String message;
while ((message = socketReader.readLine()) != null) {
System.out.println("server: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}