Skip to content

Instantly share code, notes, and snippets.

@velitasali
Last active September 23, 2023 19:33
Show Gist options
  • Save velitasali/b2305dadff0eac27a6df35099fb41ceb to your computer and use it in GitHub Desktop.
Save velitasali/b2305dadff0eac27a6df35099fb41ceb to your computer and use it in GitHub Desktop.
Asynchronous & multithreaded TCP server/client example in Java
public static class Example {
public static void main(String[] argss) throws Exception {
int intStart = 6;
try (ServerSocket serverSocket = new ServerSocket()) {
serverSocket.bind(new InetSocketAddress(0));
Thread serverThread = new Thread(() -> {
try {
while (serverSocket.isBound()) {
Socket clientSocket = serverSocket.accept();
DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(clientSocket.getOutputStream());
Thread serverWriter = new Thread(() -> {
try {
for (int i = 0; i < intStart; i++) {
Thread.sleep(1000);
outputStream.writeInt(i);
}
} catch (Exception e) {
e.printStackTrace();
}
});
serverWriter.start();
for (int i = 0; i < intStart; i++) {
Thread.sleep(300);
inputStream.readInt();
}
serverWriter.join();
}
} catch (Exception ignored) {
}
});
serverThread.start();
try (Socket clientSocket = new Socket()) {
clientSocket.connect(new InetSocketAddress(serverSocket.getLocalPort()));
DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(clientSocket.getOutputStream());
Thread clientWriter = new Thread(() -> {
try {
for (int i = 0; i < intStart; i++) {
Thread.sleep(200);
outputStream.writeInt(i);
}
} catch (Exception e) {
e.printStackTrace();
}
});
clientWriter.start();
for (int i = 0; i < intStart; i++) {
Thread.sleep(300);
System.out.println("client read: " + inputStream.readInt());
}
clientWriter.join();
} finally {
serverSocket.close();
serverThread.join();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment