Feedback Form

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 और ServerSocket classes 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