29
loading...
This website collects cookies to deliver better user experience
This article was first published in bazlur.com
package com.bazlur;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
public class Day016 {
public static void main(String[] args) throws IOException {
if (args.length != 1) throw new IllegalArgumentException("Please specify port");
var port = Integer.parseInt(args[0]);
var serverSocket = new ServerSocket(port);
System.out.println("Started server on port " + port);
while (true) {
try (var socket = serverSocket.accept();
var in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
var out = new PrintWriter(socket.getOutputStream(), true)) {
String line;
while ((line = in.readLine()) != null) {
out.println(line.toUpperCase());
}
} catch (IOException e) {
System.out.println("Was unable to establish or communicate with client socket:" + e.getMessage());
}
}
}
}
package com.bazlur;
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.Executors;
public class Day017 {
public static void main(String[] args) throws IOException {
if (args.length != 1) throw new IllegalArgumentException("Please specify port");
var port = Integer.parseInt(args[0]);
var executorService = Executors.newCachedThreadPool();
var serverSocket = new ServerSocket(port);
System.out.println("Started server on port " + port);
while (true) {
var socket = serverSocket.accept();
executorService.submit(() -> handle(socket));
}
}
private static void handle(Socket socket) {
try (socket;
var in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
var out = new PrintWriter(socket.getOutputStream(), true)) {
String line;
while ((line = in.readLine()) != null) {
out.println(line.toUpperCase());
}
} catch (IOException e) {
System.out.println("Was unable to establish or communicate with client socket:" + e.getMessage());
}
}
}
package com.bazlur;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.LockSupport;
public class ThreadCount {
public static void main(String[] args) {
AtomicInteger threadCount = new AtomicInteger();
for (; ; ) {
Thread thread = new Thread(() -> {
var count = threadCount.incrementAndGet();
System.out.println("count = " + count);
LockSupport.park();
});
thread.start();
}
}
}
package com.bazlur;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.ConcurrentLinkedDeque;
public class Day018 {
static Map<SocketChannel, Queue<ByteBuffer>> pendingData = new HashMap<>();
public static void main(String[] args) throws IOException {
if (args.length != 1) throw new IllegalArgumentException("Please specify port");
var port = Integer.parseInt(args[0]);
ServerSocketChannel socketChannel = ServerSocketChannel.open();
socketChannel.bind(new InetSocketAddress(port));
socketChannel.configureBlocking(false);
var selector = Selector.open();
socketChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
var select = selector.select();
if (select == 0) continue;
var selectionKeys = selector.selectedKeys();
var iterator = selectionKeys.iterator();
while (iterator.hasNext()) {
SelectionKey key = iterator.next();
if (key.isValid()) {
if (key.isAcceptable()) {
accept(key);
} else if (key.isReadable()) {
read(key);
} else if (key.isWritable()) {
write(key);
}
}
iterator.remove();
}
}
}
private static void accept(SelectionKey selectionKey) throws IOException {
var channel = (ServerSocketChannel) selectionKey.channel();
var sc = channel.accept(); //never null
System.out.println("Connected: " + sc);
pendingData.put(sc, new ConcurrentLinkedDeque<>());
sc.configureBlocking(false);
sc.register(selectionKey.selector(), SelectionKey.OP_READ);
}
private static void read(SelectionKey selectionKey) throws IOException {
var channel = (SocketChannel) selectionKey.channel();
var byteBuffer = ByteBuffer.allocateDirect(80);
var read = channel.read(byteBuffer);
if (read == -1) {
channel.close();
pendingData.remove(channel);
return;
}
if (read > 0) {
processBuffer(byteBuffer);
pendingData.get(channel).add(byteBuffer);
selectionKey.interestOps(SelectionKey.OP_WRITE);
}
}
private static void write(SelectionKey selectionKey) throws IOException {
var channel = (SocketChannel) selectionKey.channel();
var queue = pendingData.getOrDefault(channel, new ArrayDeque<>());
while (!queue.isEmpty()) {
var buff = queue.peek();
if (buff.position() != buff.limit()) {
buff.flip();
}
var written = channel.write(buff);
if (written == -1) {
channel.close();
pendingData.remove(channel);
return;
}
if (buff.hasRemaining()) return;
queue.remove();
}
selectionKey.interestOps(SelectionKey.OP_READ);
}
private static void processBuffer(ByteBuffer byteBuffer) {
byteBuffer.flip();
StringBuilder line = new StringBuilder();
line.append(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.getDefault())))
.append("<<server>>: ");
for (int b = 0; b < byteBuffer.limit(); b++) {
var b1 = byteBuffer.get(b);
line.append(Character.toUpperCase((char) b1));
}
var s = line.toString();
var bytes = s.getBytes();
byteBuffer.clear();
byteBuffer.put(bytes);
System.out.println("Executing from: " + Thread.currentThread());
}
}
package com.bazlur;
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.Executors;
public class Day018_1 {
public static void main(String[] args) throws IOException {
if (args.length != 1) throw new IllegalArgumentException("Please specify port");
var port = Integer.parseInt(args[0]);
var serverSocket = new ServerSocket(port);
System.out.println("Started server on port " + port);
try (var executors = Executors.newVirtualThreadExecutor()) {
while (true) {
var socket = serverSocket.accept();
executors.submit(() -> handle(socket));
}
}
}
private static void handle(Socket socket) {
try (socket;
var in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
var out = new PrintWriter(socket.getOutputStream(), true)) {
String line;
while ((line = in.readLine()) != null) {
out.println(line.toUpperCase());
}
} catch (IOException e) {
System.out.println("Was unable to establish or communicate with client socket:" + e.getMessage());
}
}
}