In this Q&A, we'll go over how to create a server socket, connect to the server and send/receive messages using Socket APIs
The demo code below does it. Server and client sockets are created in separate threads, they send/receive data and exit thread after that.
package com.javahowdoi.network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class SocketDemo {
public static class Server implements AutoCloseable{
private ServerSocket serverSocket;
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public void read(int port) throws IOException {
serverSocket = new ServerSocket(port);
clientSocket = serverSocket.accept();
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String greeting = in.readLine();
System.out.println(greeting);
out.println("hello client");
}
public void close() throws IOException {
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
}
public static class GreetClient implements AutoCloseable{
private Socket clientSocket;
private PrintWriter out;
private BufferedReader in;
public void connectAndSend(String ip, int port) throws IOException {
clientSocket = new Socket(ip, port);
out = new PrintWriter(clientSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println(sendAndReceiveMessage("hello server"));
}
private String sendAndReceiveMessage(String msg) throws IOException {
out.println(msg);
String resp = in.readLine();
return resp;
}
public void close() throws IOException {
in.close();
out.close();
clientSocket.close();
}
}
public static void main(String[] args) throws Exception {
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit( () -> {
try(Server s = new Server()){
s.read(6666);
} catch(Exception e) {} }
);
Thread.sleep(1000);
es.submit( () -> {
try(GreetClient s = new GreetClient()){
s.connectAndSend("localhost", 6666);
} catch(Exception e) {} }
);
es.awaitTermination(2, TimeUnit.SECONDS);
es.shutdown();
}
}
Comments
Post a Comment