This question presents two rather small Java programs: the first one is a simple client that reads text from command line and sends it to the server (TextSender.java); the server does nothing more but echoes the received text on the command line (TextReceiver.java)
TextSender.java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TextSender {
public static final int PORT = 1857;
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("Usage: java Main IP");
return;
}
try (Socket clientSocket = new Socket(args[0], PORT);
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.trim().equals("quit")) {
break;
}
// Terminate the line so that the receiver process knows that
// the end of input is occured.
out.print(line + "\n");
out.flush();
}
} catch (UnknownHostException ex) {
System.err.println("[ERROR] Could not reach host \"" +
args[0] + "\".");
System.exit(1);
} catch (IOException ex) {
System.err.println("[ERROR] IO failed on host \"" +
args[0] + "\".");
System.exit(1);
}
}
}
TextReceiver.java:
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Logger;
public class TextReceiver implements Runnable {
public static final int PORT = 1857;
public static void main(String[] args) {
new Thread(new TextReceiver()).start();
}
@Override
public void run() {
ServerSocket serverSocket = null;
Socket clientSocket = null;
BufferedReader in = null;
try {
serverSocket = new ServerSocket(PORT);
System.out.println("[RECEIVER] Waiting for a client.");
clientSocket = serverSocket.accept();
in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
System.out.println("[RECEIVER] A client connected.");
Scanner scanner = new Scanner(in);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
} catch (IOException ex) {
Logger.getLogger("CONNECTION").severe(ex.getMessage());
if (in != null) {
close(in, clientSocket, serverSocket);
} else if (clientSocket != null) {
close(clientSocket, serverSocket);
} else if (serverSocket != null) {
close(serverSocket);
}
}
close(in, clientSocket, serverSocket);
}
private void close(Closeable... closeables) {
for (Closeable c : closeables) {
try {
c.close();
} catch (IOException ex) {
}
}
}
}
Please, tell me anything I could improve.