Minimal Java socket servers implemented in three variants:
- Single-threaded server with a simple client
- Multi-threaded server with a simple client
- Thread pool-based server
- Java JDK 11 or newer (
javacandjavaon PATH) - Linux/macOS shell (commands use Bash)
singleThreaded/— packagesingleThreadedwithServerandClienton port 8090multiThreaded/— packagemultiThreadedwithServerandClienton port 8010threadPool/— packagethreadPoolwithServeron port 8010
From the project root (/home/raghu/Documents/webserver):
mkdir -p out
javac -d out singleThreaded/*.java
javac -d out multiThreaded/*.java
javac -d out threadPool/*.javaThis compiles all sources into the out/ directory, preserving package structure.
Server (port 8090):
java -cp out singleThreaded.ServerClient (in a separate terminal):
java -cp out singleThreaded.ClientExpected: client prints a single line response from the server.
Server (port 8010):
java -cp out multiThreaded.ServerClient (spawns many concurrent requests):
java -cp out multiThreaded.ClientExpected: multiple responses printed, one per client thread.
Server (port 8010, fixed-size pool):
java -cp out threadPool.ServerNote: There is no client for this variant in the repo. You can:
- Reuse
multiThreaded.Clientagainst port 8010, or - Use
ncto test:printf 'ping\n' | nc localhost 8010
rm -rf out- Ensure no other process is using ports 8090 or 8010.
- Servers log basic connection info to stdout and run until terminated (Ctrl+C).