A production-grade, real-time multi-client chat system built from scratch using raw Java Sockets β no frameworks, no shortcuts. Powered by Groq AI for toxicity detection and smart replies.
| Devanshu Sharma | Sanmati Jain |
| Feature | Description |
|---|---|
| π Raw TCP Chat | Multi-client real-time chat using Java ServerSocket β zero frameworks |
| π§΅ Thread per Client | Dedicated ClientHandler thread for each connected user |
| π Multiple Rooms | Create, join, and leave chat rooms dynamically |
| π€ AI Toxicity Detection | Groq AI (Llama 3.3 70B) scans every message before broadcast |
| π‘ Smart Replies | /ai command generates 3 context-aware reply suggestions |
| π Browser Support | WebSocket β TCP proxy bridges browser clients to Java server |
| π‘ REST API | Full HTTP API for rooms, history, stats |
| π¬ Private Messaging | Direct messages between users via /pm command |
Browser Clients
β WebSocket (ws://localhost:3001)
βΌ
βββββββββββββββ
β proxy.js β Node.js WebSocket β TCP Bridge
ββββββββ¬βββββββ
β TCP (port 9291)
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β Java Chat Server β
β βββββββββββββββ βββββββββββββββββ β
β β ChatServer β β RestApiServerβ β
β β port 9291 β β port 8281 β β
β ββββββββ¬βββββββ βββββββββββββββββ β
β β β
β ββββββββΌβββββββ βββββββββββββββββ β
β βClientHandlerβ β AIService β β
β β(per thread) β β Groq API β β
β βββββββββββββββ βββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββ
chat-system/
βββ π pom.xml
βββ π README.md
βββ π frontend/
β βββ π index.html β Single page UI
β βββ β‘ proxy.js β WebSocket β TCP bridge
β βββ π restart_servers.ps1
βββ π src/main/java/com/chat/
β βββ π Main.java
β βββ π chat/
β β βββ ChatServer.java β ServerSocket server
β β βββ ClientHandler.java β Thread per client
β β βββ CommandProcessor.java
β βββ π server/
β β βββ RestApiServer.java β HTTP API (port 8281)
β βββ π services/
β β βββ MessageService.java
β β βββ AIService.java β Groq AI integration
β βββ π models/
β βββ π exceptions/
β βββ π utils/
β βββ ApiConfig.java
βββ π§ͺ tcp_test.js
- Java 17+
- Maven 3.8+
- Node.js 18+
- Free Groq API key β console.groq.com (no card needed)
git clone https://github.com/Devanshu11976/Chat-System.git
cd Chat-System/chat-system# PowerShell
$env:GROQ_API_KEY="your_groq_key_here"# Mac / Linux
export GROQ_API_KEY="your_groq_key_here"# Build
mvn package
# Run (PowerShell)
$env:CHAT_SOCKET_PORT='9291'
$env:CHAT_REST_PORT='8281'
java -cp "target\classes;lib\json-20231013.jar" com.chat.Main# Open a new terminal
cd frontend
$env:WS_PORT='3001'
$env:CHAT_PORT='9291'
node proxy.jsOpen frontend/index.html in your browser
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/rooms |
List all chat rooms |
GET |
/api/rooms/{roomId} |
Room details + members |
GET |
/api/rooms/{roomId}/history |
Message history |
GET |
/api/users |
Online users |
GET |
/api/stats |
Server statistics |
GET |
/api/moderation/log |
AI toxicity log |
curl http://localhost:8281/api/rooms
curl http://localhost:8281/api/stats| Command | Description |
|---|---|
/join <room> |
Join or create a room |
/leave |
Leave current room |
/msg <text> |
Send message to room |
/pm <username> <text> |
Private message |
/ai <context> |
Get 3 AI smart reply suggestions |
/users |
List users in current room |
/rooms |
List all active rooms |
/quit |
Disconnect |
Every message is analyzed by Groq AI (Llama 3.3 70B) before broadcast:
| Score | Action | Display |
|---|---|---|
| 0 β 30 | β Allow | Normal message |
| 31 β 60 | Flagged with warning tag | |
| 61 β 100 | π« Block | Hidden + sender notified |
3 blocked messages β automatic disconnect
Generates 3 context-aware reply suggestions with tone labels:
friendly Β· professional Β· casual Β· funny
| Service | Default Port | Env Variable |
|---|---|---|
| Java TCP Chat Server | 9291 |
CHAT_SOCKET_PORT |
| Java REST API | 8281 |
CHAT_REST_PORT |
| Node WebSocket Proxy | 3001 |
WS_PORT |
# Run the automated TCP test
node tcp_test.jsThis script connects via TCP, sets a username, creates the autotest room, sends a message, and verifies server responses automatically.
Port already in use
# Find and kill the process
netstat -ano | findstr :9291
taskkill /PID <pid> /FFrontend not connecting
- Make sure
proxy.jsis running on port3001 - Check
WS_URLconstant infrontend/index.htmlmatches proxy port - Verify REST API is up:
curl http://localhost:8281/api/rooms
"Unknown command" in chat
- Check
proxy.logβ proxy forwards raw text to TCP - Ensure command format is exact, e.g.
/join generalnot/join/general
AI not responding
- Verify
GROQ_API_KEYenv variable is set - App has automatic fallback to keyword-based moderation if Groq is unavailable
| Layer | Technology |
|---|---|
| Chat Server | Java 17 Β· ServerSocket Β· ConcurrentHashMap |
| Threading | Thread per client Β· AtomicInteger Β· synchronized |
| REST API | com.sun.net.httpserver.HttpServer |
| JSON | org.json |
| WS Bridge | Node.js Β· ws library |
| AI | Groq API Β· Llama 3.3 70B |
| Build | Maven |
MIT Β© 2026 Devanshu Sharma & Sanmati Jain
Built with β€οΈ using raw Core Java β no frameworks, no shortcuts.
"If you can't explain it without a framework, you don't understand it."
π Made with love by Dev & San