TCP Handshake in Java: Establishing Persistent Client-Server Connections
TCP Handshake in Java: Establishing Persistent Client-Server Connections
जब भी हम Java में networking applications बनाते हैं, तो सबसे पहले यह समझना जरूरी है कि TCP (Transmission Control Protocol) कैसे काम करता है। TCP एक connection-oriented protocol है, जिसका मतलब है कि यह data भेजने से पहले sender और receiver के बीच एक भरोसेमंद connection establish करता है। इस process को ही हम TCP Handshake कहते हैं।
What is TCP Handshake?
TCP Handshake एक तीन-step process है जो client और server के बीच connection establish करने के लिए इस्तेमाल होता है। इसे 3-Way Handshake भी कहा जाता है क्योंकि इसमें तीन main signals (SYN, SYN-ACK, ACK) exchange किए जाते हैं। यह process ensure करता है कि दोनों systems data transfer के लिए तैयार हैं और connection भरोसेमंद है।
Steps of 3-Way TCP Handshake
- Step 1 (SYN): Client server को SYN (synchronize) message भेजता है ताकि connection request initiate हो सके।
- Step 2 (SYN-ACK): Server इस request को receive करके एक acknowledgment भेजता है, जिसे SYN-ACK कहते हैं।
- Step 3 (ACK): Client इस response को acknowledge करता है और ACK message भेजकर connection को confirm करता है।
अब दोनों के बीच एक persistent TCP connection बन चुका होता है। इसका मतलब है कि अब data reliably दोनों directions में flow कर सकता है।
How TCP Handshake Works in Java
Java में TCP connection establish करने के लिए हम Socket और ServerSocket classes का use करते हैं। ये classes Java के java.net package में मौजूद होती हैं। Client connection initiate करता है जबकि Server connection accept करता है — और इसी process में handshake complete होता है।
1. Server Side Implementation
Server को सबसे पहले एक ServerSocket create करना होता है और किसी specific port पर listen करना होता है। जैसे ही कोई client connect करने की कोशिश करता है, server उसे accept करता है।
// Server Side Code Example
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5000);
System.out.println("Server started. Waiting for client...");
Socket socket = serverSocket.accept();
System.out.println("Client connected.");
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String message = reader.readLine();
System.out.println("Message from client: " + message);
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. Client Side Implementation
Client side पर हम Socket class का object बनाते हैं, जो server के IP address और port number पर connect करता है। जैसे ही client connect करता है, TCP handshake automatically initiate होता है।
// Client Side Code Example
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 5000);
System.out.println("Connected to server.");
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
writer.println("Hello Server, Connection Established!");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP Handshake Process in Detail
जब ऊपर दिए गए Java programs execute होते हैं, तो background में यह तीन-step handshake process चलता है। चलिए इसे step-by-step समझते हैं:
| Step | Action | Message |
|---|---|---|
| 1 | Client initiates connection | SYN |
| 2 | Server acknowledges and responds | SYN-ACK |
| 3 | Client confirms acknowledgment | ACK |
इस process के पूरा होने के बाद, दोनों के बीच एक reliable, bidirectional channel establish हो जाता है। अब client और server के बीच data packets बिना loss के भेजे और receive किए जा सकते हैं।
Persistent TCP Connections
Persistent TCP connection का मतलब है कि connection तब तक open रहता है जब तक client या server उसे explicitly close नहीं करते। इसका फायदा यह है कि हर बार नया handshake करने की जरूरत नहीं पड़ती — multiple messages एक ही connection पर भेजे जा सकते हैं।
Advantages of Persistent Connections
- Reduced latency — हर बार नया connection बनाने की जरूरत नहीं।
- Better performance — repeated data exchange तेज़ होता है।
- Reliable delivery — packet loss या duplication नहीं होता।
Example: Keeping TCP Connection Alive
// Example of persistent connection
socket.setKeepAlive(true);
ऊपर दिया गया code connection को alive रखने में मदद करता है। अगर कोई inactivity होती है, तो भी periodic signals भेजे जाते हैं ताकि connection timeout न हो।
TCP Handshake vs UDP Connection
TCP और UDP दोनों transport layer protocols हैं, लेकिन इनके काम करने के तरीके बिल्कुल अलग हैं। नीचे दिए गए table से फर्क स्पष्ट हो जाएगा:
| Feature | TCP | UDP |
|---|---|---|
| Connection Type | Connection-oriented (Handshake required) | Connectionless (No handshake) |
| Reliability | Reliable | Unreliable |
| Speed | Comparatively Slower | Faster |
| Use Case | File Transfer, Web Communication | Streaming, Online Games |
Common Errors in TCP Handshake
TCP connection establish करते समय कुछ common issues भी आ सकते हैं, जैसे:
- Connection Refused: जब server run नहीं हो रहा होता या port busy होता है।
- Timeout Error: जब client को server से timely response नहीं मिलता।
- Broken Pipe: जब connection अचानक से close हो जाता है।
Solution Tips
- Ensure server पहले से listening mode में हो।
- Proper exception handling का use करो।
- Timeouts और retries implement करो।
Real-Life Example of TCP Handshake
जब आप किसी website को browser में open करते हो, तो TCP handshake automatically होता है। Browser (client) server से connect होता है, तीन-step handshake complete करता है, और फिर HTTP data exchange शुरू होता है। यही mechanism Java programs में भी use होता है जब हम socket communication करते हैं।
Important Java Classes for TCP
- Socket: Client-side communication के लिए।
- ServerSocket: Server-side connection accept करने के लिए।
- InputStream / OutputStream: Data भेजने और receive करने के लिए।
- BufferedReader / PrintWriter: Text data के लिए convenient I/O streams।
TCP Handshake Diagram (Conceptual View)
यहाँ एक simplified diagram दिखाया गया है जो connection establish होने का visual समझ देता है:
Client Server | ------- SYN --------------------> | | <---- SYN + ACK ----------------- | | ------- ACK --------------------> | Connection Established ✅
Important Points for Exam
- TCP एक reliable protocol है जो 3-Way Handshake से connection बनाता है।
- Java में socket programming के लिए
SocketऔरServerSocketclasses use होती हैं। - Persistent connections performance improve करते हैं।
- Handshake process में तीन main signals होते हैं — SYN, SYN-ACK, और ACK।
- UDP में handshake नहीं होता, इसलिए वो faster लेकिन unreliable होता है।
TCP Handshake in Java Summary Notes
| Term | Meaning |
|---|---|
| SYN | Synchronization request from client |
| SYN-ACK | Server acknowledgment of SYN |
| ACK | Client acknowledgment to server |
| Socket | Client connection endpoint |
| ServerSocket | Server listener for incoming connections |
| Persistent Connection | Long-lasting connection maintained over TCP |