This guide provides comprehensive instructions for compiling and running all three socket programming tasks on Windows 10 using Java 17 and IntelliJ IDEA.
- Java Development Kit (JDK): Version 17.0.14 LTS or higher
- Operating System: Windows 10 (instructions adaptable for other OS)
- IDE: IntelliJ IDEA (Community or Ultimate Edition)
- Git: For version control and repository management
# Verify Java installation
java -version
javac -version
# Should display Java 17.x.xsocket-programming/
├── task1-hostname-converter/
│ └── src/
│ └── HostnameToIP.java
├── task2-ping-pong/
│ ├── src/
│ │ ├── server/
│ │ │ └── PingPongServer.java
│ │ └── client/
│ │ └── PingPongClient.java
└── task3-uppercase-converter/
└── src/
├── server/
│ └── UppercaseServer.java
└── client/
└── UppercaseClient.java
- Open IntelliJ IDEA
- Open Project: File → Open → Select
socket-programmingfolder - Verify Project Structure: Ensure all three modules are loaded
- Check SDK: File → Project Structure → Project → Ensure Java 17 is selected
- Build All: Build → Build Project (
Ctrl + F9) - Verify Compilation: Check that no compilation errors appear
- Module-Specific Build: Right-click module → Build Module
Task 1 Configuration:
- Name:
HostnameToIP - Main class:
HostnameToIP - Module:
task1-hostname-converter
Task 2 Server Configuration:
- Name:
PingPongServer - Main class:
server.PingPongServer - Module:
task2-ping-pong
Task 2 Client Configuration:
- Name:
PingPongClient - Main class:
client.PingPongClient - Module:
task2-ping-pong
Task 3 Server Configuration:
- Name:
UppercaseServer - Main class:
server.UppercaseServer - Module:
task3-uppercase-converter
Task 3 Client Configuration:
- Name:
UppercaseClient - Main class:
client.UppercaseClient - Module:
task3-uppercase-converter
# Navigate to task directory
cd task1-hostname-converter
# Compile
javac src/HostnameToIP.java
# Run
java -cp src HostnameToIP# Navigate to task directory
cd task2-ping-pong
# Compile server
javac src/server/PingPongServer.java
# Compile client
javac src/client/PingPongClient.java
# Run server (Terminal 1)
java -cp src server.PingPongServer
# Run client (Terminal 2)
java -cp src client.PingPongClient# Navigate to task directory
cd task3-uppercase-converter
# Compile server
javac src/server/UppercaseServer.java
# Compile client
javac src/client/UppercaseClient.java
# Run server (Terminal 1)
java -cp src server.UppercaseServer
# Run client (Terminal 2)
java -cp src client.UppercaseClientCreate file: compile-all.bat
@echo off
echo ========================================
echo Compiling Socket Programming Assignment
echo ========================================
echo.
echo Compiling Task 1: Hostname to IP Converter...
cd task1-hostname-converter
javac src/HostnameToIP.java
if %errorlevel% neq 0 (
echo ERROR: Task 1 compilation failed
exit /b 1
)
echo Task 1 compiled successfully
cd ..
echo.
echo Compiling Task 2: Ping-Pong Application...
cd task2-ping-pong
javac src/server/PingPongServer.java
if %errorlevel% neq 0 (
echo ERROR: Task 2 server compilation failed
exit /b 1
)
javac src/client/PingPongClient.java
if %errorlevel% neq 0 (
echo ERROR: Task 2 client compilation failed
exit /b 1
)
echo Task 2 compiled successfully
cd ..
echo.
echo Compiling Task 3: Uppercase Converter...
cd task3-uppercase-converter
javac src/server/UppercaseServer.java
if %errorlevel% neq 0 (
echo ERROR: Task 3 server compilation failed
exit /b 1
)
javac src/client/UppercaseClient.java
if %errorlevel% neq 0 (
echo ERROR: Task 3 client compilation failed
exit /b 1
)
echo Task 3 compiled successfully
cd ..
echo.
echo ========================================
echo All tasks compiled successfully!
echo ========================================Create file: run-servers.bat
@echo off
echo Starting all servers...
echo.
echo Starting Ping-Pong Server on port 12345...
start "PingPong Server" cmd /k "cd task2-ping-pong && java -cp src server.PingPongServer"
timeout /t 2 /nobreak >nul
echo Starting Uppercase Server on port 54321...
start "Uppercase Server" cmd /k "cd task3-uppercase-converter && java -cp src server.UppercaseServer"
echo.
echo Both servers started in separate windows.
echo Press any key to exit this window...
pause >nul- No Compilation Errors: All
.javafiles compile without errors - Class Files Generated: Corresponding
.classfiles created - Application Startup: Programs start without exceptions
- Network Binding: Servers successfully bind to their ports
# Task 1 verification
java -cp task1-hostname-converter/src HostnameToIP
# Should display welcome message and prompt
# Task 2 verification
java -cp task2-ping-pong/src server.PingPongServer
# Should display "Ping-Pong Server Started" message
# Task 3 verification
java -cp task3-uppercase-converter/src server.UppercaseServer
# Should display "Uppercase Message Converter Server" messageCause: Java not in system PATH Solution:
- Verify Java installation:
java -version - Add Java to PATH or use full path to javac
- Set JAVA_HOME environment variable
Cause: Incorrect classpath or package structure Solution:
- Verify directory structure matches package declarations
- Use correct classpath:
-cp srcfor source compilation - Check import statements
Cause: Mismatch between package declaration and directory structure Solution:
- Ensure
serverandclientsubdirectories exist - Verify package declarations in source files
- Compile from correct base directory
Cause: Previous server instance still running Solution:
- Stop previous server instance
- Wait 30 seconds for port release
- Use different port with command line argument
Cause: Incorrect classpath for execution Solution:
- Use
-cp srcwhen running from base directory - Verify the class file exists in expected location
- Check package name in java command
# Compile with debug information
javac -g src/HostnameToIP.java
# Compile with verbose output
javac -verbose src/server/PingPongServer.java# Compile with optimizations
javac -O src/client/UppercaseClient.java
# Compile with specific encoding
javac -encoding UTF-8 src/server/UppercaseServer.java# Generate JavaDoc documentation
javadoc -d docs/api -sourcepath src -subpackages server,client- Refresh Project: File → Reload Gradle/Maven Project
- Clear Cache: File → Invalidate Caches and Restart
- Rebuild: Build → Rebuild Project
- Check Module Dependencies: Project Structure → Modules
- Import Project: File → Import → Existing Projects into Workspace
- Set Build Path: Right-click project → Build Path → Configure Build Path
- Run Configuration: Run → Run Configurations → Java Application
# 1. Compile everything
./compile-all.bat
# 2. Test Task 1
java -cp task1-hostname-converter/src HostnameToIP
# Enter: google.com
# Expected: IP address displayed
# 3. Test Task 2 (two terminals)
# Terminal 1:
java -cp task2-ping-pong/src server.PingPongServer
# Terminal 2:
java -cp task2-ping-pong/src client.PingPongClient
# Enter: ping
# Expected: pong response
# 4. Test Task 3 (two terminals)
# Terminal 1:
java -cp task3-uppercase-converter/src server.UppercaseServer
# Terminal 2:
java -cp task3-uppercase-converter/src client.UppercaseClient
# Enter: hello world
# Expected: HELLO WORLD response- Parallel Compilation: IntelliJ automatically uses multiple cores
- Incremental Builds: Only modified files recompiled
- Memory Settings: Increase heap size for large projects
- JVM Optimization: Use
-serverflag for production - Memory Tuning: Adjust
-Xmxand-Xmsparameters - Garbage Collection: Consider G1GC for better performance
This compilation guide ensures successful building and execution of all socket programming tasks. The multiple compilation methods (IDE, command line, batch scripts) provide flexibility for different development preferences and deployment scenarios.
For troubleshooting specific issues not covered here, refer to the main troubleshooting guide or the task-specific documentation.