हम इस ट्यूटोरियल में सीखने वाले है कि जावा नेटवर्किंग (Java Networking) और हम इसे कैसे इस्तमाल कर सकते हैं? नेटवर्क प्रोग्रामिंग शब्द का अर्थ उन कार्यक्रमों को लिखने से है जो कई उपकरणों (कंप्यूटरों) में निष्पादित होते हैं, जिसमें सभी डिवाइस एक नेटवर्क का उपयोग करके एक दूसरे से जुड़े होते हैं।
J2SE APIs के java.net पैकेज में कक्षाओं और इंटरफेस का एक संग्रह है जो निम्न-स्तरीय Communication विवरण प्रदान करता है, जिससे आप ऐसे प्रोग्राम लिख सकते हैं जो समस्या को हल करने पर ध्यान केंद्रित करते हैं।
Table of Contents
Java.net पैकेज दो सामान्य नेटवर्क प्रोटोकॉल के लिए समर्थन प्रदान करता है –
- TCP – टीसीपी ट्रांसमिशन कंट्रोल प्रोटोकॉल के लिए है, जो दो अनुप्रयोगों के बीच विश्वसनीय Communication की अनुमति देता है। टीसीपी आमतौर पर इंटरनेट प्रोटोकॉल पर प्रयोग किया जाता है, जिसे टीसीपी/आईपी कहा जाता है।
- UDP − UDP का अर्थ है यूजर डेटाग्राम प्रोटोकॉल, एक कनेक्शन रहित प्रोटोकॉल जो डेटा के पैकेट को अनुप्रयोगों के बीच प्रसारित करने की अनुमति देता है।
यह अध्याय निम्नलिखित दो विषयों पर एक अच्छी समझ देता है –
- Socket प्रोग्रामिंग − यह नेटवर्किंग में सबसे व्यापक रूप से इस्तेमाल की जाने वाली अवधारणा है और इसे बहुत विस्तार से समझाया गया है।
- URL प्रोसेसिंग − इसे अलग से कवर किया जाएगा। जावा भाषा में यूआरएल प्रोसेसिंग के बारे में जानने के लिए यहां क्लिक करें।
Socket प्रोग्रामिंग (Socket Programming in Hindi)
Socket टीसीपी का उपयोग कर दो कंप्यूटरों के बीच Communication तंत्र प्रदान करते हैं। एक क्लाइंट प्रोग्राम Communication के अंत में एक Socket बनाता है और उस Socket को सर्वर से जोड़ने का प्रयास करता है।
जब कनेक्शन किया जाता है, तो सर्वर Communication के अंत में एक Socket ऑब्जेक्ट बनाता है। क्लाइंट और सर्वर अब Socket से लिखकर और पढ़कर संवाद कर सकते हैं।
Java.net.Socket वर्ग एक Socket का प्रतिनिधित्व करता है, और java.net.ServerSocket वर्ग क्लाइंट को सुनने और उनके साथ संबंध स्थापित करने के लिए सर्वर प्रोग्राम के लिए एक तंत्र प्रदान करता है।
Socket का उपयोग करके दो कंप्यूटरों के बीच टीसीपी कनेक्शन स्थापित करते समय निम्नलिखित चरण होते हैं –
- सर्वर एक ServerSocket ऑब्जेक्ट को इंस्टेंट करता है, यह दर्शाता है कि किस पोर्ट नंबर पर Communication होना है।
- सर्वर ServerSocket वर्ग की स्वीकृति () विधि को आमंत्रित करता है। यह विधि तब तक प्रतीक्षा करती है जब तक क्लाइंट दिए गए पोर्ट पर सर्वर से कनेक्ट नहीं हो जाता।
- सर्वर के प्रतीक्षा करने के बाद, क्लाइंट Socket ऑब्जेक्ट को तुरंत चालू करता है, सर्वर का नाम और कनेक्ट करने के लिए पोर्ट नंबर निर्दिष्ट करता है।
- Socket वर्ग का निर्माता क्लाइंट को निर्दिष्ट सर्वर और पोर्ट नंबर से जोड़ने का प्रयास करता है। यदि Communication स्थापित हो गया है, तो क्लाइंट के पास अब Socket ऑब्जेक्ट है जो सर्वर से Communication करने में सक्षम है।
- सर्वर साइड पर स्वीकार () विधि क्लाइंट के Socket से जुड़े सर्वर पर एक नए Socket का संदर्भ देता है।
कनेक्शन स्थापित होने के बाद I/O स्ट्रीम का उपयोग करके Communication हो सकता है। प्रत्येक Socket में OutputStream और इनपुटस्ट्रीम दोनों होते हैं। क्लाइंट का OutputStream सर्वर के InputStream से जुड़ा है और क्लाइंट का InputStream सर्वर के OutputStream से जुड़ा है।
टीसीपी एक दो-तरफ़ा Communication प्रोटोकॉल है, इसलिए एक ही समय में दोनों धाराओं में डेटा भेजा जा सकता है। Socket को लागू करने के तरीकों का पूरा सेट प्रदान करने वाली उपयोगी कक्षाएं निम्नलिखित हैं।
सर्वरSocket क्लास के तरीके (ServerSocket Class Methods in Hindi)
Java.net.ServerSocket क्लास का उपयोग सर्वर एप्लिकेशन द्वारा पोर्ट प्राप्त करने और क्लाइंट requests को सुनने के लिए किया जाता है।
ServerSocket क्लास में चार कंस्ट्रक्टर हैं –
Sr.No. | Method & Description |
1 | public ServerSocket(int port) throws IOExceptionनिर्दिष्ट पोर्ट के लिए बाध्य सर्वर Socket बनाने का प्रयास। एक अपवाद तब होता है जब पोर्ट पहले से ही किसी अन्य एप्लिकेशन द्वारा बाध्य होता है। |
2 | public ServerSocket(int port, int backlog) throws IOExceptionपिछले कंस्ट्रक्टर के समान, बैकलॉग पैरामीटर निर्दिष्ट करता है कि प्रतीक्षा कतार में कितने आने वाले क्लाइंट स्टोर करने हैं। |
3 | public ServerSocket(int port, int backlog, InetAddress address) throws IOExceptionपिछले कंस्ट्रक्टर के समान, InetAddress पैरामीटर बाध्य करने के लिए स्थानीय IP पता निर्दिष्ट करता है। InetAddress का उपयोग उन सर्वरों के लिए किया जाता है जिनमें कई IP पते हो सकते हैं, जिससे सर्वर को यह निर्दिष्ट करने की अनुमति मिलती है कि उसके कौन से IP पते क्लाइंट requests को स्वीकार करने के लिए हैं। |
4 | public ServerSocket() throws IOExceptionएक अनबाउंड सर्वर Socket बनाता है। इस कंस्ट्रक्टर का उपयोग करते समय, जब आप सर्वर Socket को बाइंड करने के लिए तैयार हों तो bind() विधि का उपयोग करें। |
यदि ServerSocket कंस्ट्रक्टर अपवाद नहीं फेंकता है, तो इसका मतलब है कि आपका एप्लिकेशन सफलतापूर्वक निर्दिष्ट पोर्ट से बंधा हुआ है और क्लाइंट requests के लिए तैयार है।
ServerSocket क्लास के कुछ सामान्य तरीके निम्नलिखित हैं –
Sr.No. | Method & Description |
1 | public int getLocalPort()उस पोर्ट को लौटाता है जिस पर सर्वर Socket सुन रहा है। यह विधि उपयोगी है यदि आप 0 में एक कंस्ट्रक्टर में पोर्ट नंबर के रूप में पास हुए हैं और सर्वर को आपके लिए एक पोर्ट खोजने दें। |
2 | public Socket accept() throws IOExceptionआने वाले ग्राहक की प्रतीक्षा करता है। यह विधि तब तक ब्लॉक हो जाती है जब तक कि क्लाइंट निर्दिष्ट पोर्ट पर सर्वर से कनेक्ट नहीं हो जाता है या Socket टाइम आउट नहीं हो जाता है, यह मानते हुए कि टाइम-आउट मान setSoTimeout () विधि का उपयोग करके सेट किया गया है। अन्यथा, यह विधि अनिश्चित काल के लिए ब्लॉक हो जाती है। |
3 | public void setSoTimeout(int timeout)स्वीकार () के दौरान क्लाइंट के लिए सर्वर Socket कितने समय तक प्रतीक्षा करता है, इसके लिए टाइम-आउट मान सेट करता है। |
4 | public void bind(SocketAddress host, int backlog)Socket को निर्दिष्ट सर्वर से बांधता है और Socketएड्रेस ऑब्जेक्ट में पोर्ट करता है। इस विधि का प्रयोग करें यदि आपने no-argument कन्स्ट्रक्टर का उपयोग कर सर्वर Socket को तत्काल किया है। |
जब ServerSocket स्वीकार करता है (), क्लाइंट कनेक्ट होने तक विधि वापस नहीं आती है। क्लाइंट के कनेक्ट होने के बाद ServerSocket एक अनिर्दिष्ट पोर्ट पर एक नया Socket बनाता है और इस नए Socket का संदर्भ देता है। एक टीसीपी कनेक्शन अब क्लाइंट और सर्वर के बीच मौजूद है और Communication शुरू हो सकता है।
Socket क्लास के तरीके (Socket Class Methods in Hindi)
Java.net.Socket वर्ग Socket का प्रतिनिधित्व करता है जो क्लाइंट और सर्वर दोनों एक दूसरे के साथ संवाद करने के लिए उपयोग करते हैं। क्लाइंट एक Socket ऑब्जेक्ट को इंस्टेंट करके प्राप्त करता है, जबकि सर्वर एक Socket ऑब्जेक्ट को स्वीकार () विधि के रिटर्न मान से प्राप्त करता है।
Socket क्लास में पाँच कंस्ट्रक्टर होते हैं जिनका उपयोग क्लाइंट सर्वर से कनेक्ट करने के लिए करता है –
Sr.No. | Method & Description |
1 | public Socket(String host, int port) throws UnknownHostException, IOException.यह विधि निर्दिष्ट पोर्ट पर निर्दिष्ट सर्वर से कनेक्ट करने का प्रयास करती है। यदि यह कन्स्ट्रक्टर अपवाद नहीं फेंकता है, तो कनेक्शन सफल होता है और क्लाइंट सर्वर से जुड़ा होता है। |
2 | public Socket(InetAddress host, int port) throws IOExceptionयह विधि पिछले कन्स्ट्रक्टर के समान है, सिवाय इसके कि होस्ट को InetAddress ऑब्जेक्ट द्वारा दर्शाया गया है। |
3 | public Socket(String host, int port, InetAddress localAddress, int localPort) throws IOException.निर्दिष्ट होस्ट और पोर्ट से जुड़ता है, निर्दिष्ट पते और पोर्ट पर स्थानीय होस्ट पर Socket बनाता है। |
4 | public Socket(InetAddress host, int port, InetAddress localAddress, int localPort) throws IOException.यह विधि पिछले कन्स्ट्रक्टर के समान है, सिवाय इसके कि होस्ट को स्ट्रिंग के बजाय InetAddress ऑब्जेक्ट द्वारा दर्शाया गया है। |
5 | public Socket()एक असंबद्ध Socket बनाता है। इस Socket को सर्वर से जोड़ने के लिए कनेक्ट () विधि का उपयोग करें। |
जब Socket कंस्ट्रक्टर वापस आता है, तो यह न केवल Socket ऑब्जेक्ट को तुरंत चालू करता है, बल्कि वास्तव में निर्दिष्ट सर्वर और पोर्ट से कनेक्ट करने का प्रयास करता है।
Socket क्लास में रुचि के कुछ तरीके यहां सूचीबद्ध हैं। ध्यान दें कि क्लाइंट और सर्वर दोनों के पास Socket ऑब्जेक्ट है, इसलिए इन विधियों को क्लाइंट और सर्वर दोनों द्वारा लागू किया जा सकता है।
Sr.No. | Method & Description |
1 | public void connect(SocketAddress host, int timeout) throws IOExceptionयह विधि Socket को निर्दिष्ट होस्ट से जोड़ती है। इस विधि की आवश्यकता तभी होती है जब आप no-argument कन्स्ट्रक्टर का उपयोग करके Socket को तुरंत चालू करते हैं। |
2 | public InetAddress getInetAddress()यह विधि उस दूसरे कंप्यूटर का पता लौटाती है जिससे यह Socket जुड़ा हुआ है। |
3 | public int getPort()रिमोट मशीन पर Socket के लिए बाध्य पोर्ट लौटाता है। |
4 | public int getLocalPort()वह पोर्ट लौटाता है जिससे Socket स्थानीय मशीन पर बंधा होता है। |
5 | public SocketAddress getRemoteSocketAddress()रिमोट Socket का पता लौटाता है। |
6 | public InputStream getInputStream() throws IOExceptionSocket की इनपुट स्ट्रीम लौटाता है। इनपुट स्ट्रीम रिमोट Socket के आउटपुट स्ट्रीम से जुड़ा है। |
7 | public OutputStream getOutputStream() throws IOExceptionSocket का आउटपुट स्ट्रीम लौटाता है। आउटपुट स्ट्रीम रिमोट Socket के इनपुट स्ट्रीम से जुड़ा है। |
8 | public void close() throws IOExceptionSocket को बंद कर देता है, जिससे यह Socket ऑब्जेक्ट फिर से किसी भी सर्वर से कनेक्ट करने में सक्षम नहीं होता है। |
InetAddress क्लास के तरीके (InetAddress Class Methods in Hindi)
यह वर्ग एक इंटरनेट प्रोटोकॉल (आईपी) पते का प्रतिनिधित्व करता है। यहां निम्नलिखित उपयोगी तरीके दिए गए हैं जिनकी आपको Socket प्रोग्रामिंग करते समय आवश्यकता होगी –
Sr.No. | Method & Description |
1 | static InetAddress getByAddress(byte[] addr)कच्चा IP पता दिया गया एक InetAddress ऑब्जेक्ट लौटाता है। |
2 | static InetAddress getByAddress(String host, byte[] addr)प्रदान किए गए होस्ट नाम और IP पते के आधार पर एक InetAddress बनाता है। |
3 | static InetAddress getByName(String host)होस्ट के नाम को देखते हुए, होस्ट का IP पता निर्धारित करता है। |
4 | String getHostAddress()शाब्दिक प्रस्तुति में IP पता स्ट्रिंग लौटाता है। |
5 | String getHostName()इस आईपी पते के लिए होस्ट नाम प्राप्त करें। |
6 | static InetAddress InetAddress getLocalHost()स्थानीय होस्ट लौटाता है। |
7 | String toString()इस आईपी पते को एक स्ट्रिंग में कनवर्ट करता है। |
Socket क्लाइंट उदाहरण (Socket Client Example)
निम्नलिखित ग्रीटिंग क्लाइंट एक क्लाइंट प्रोग्राम है जो Socket का उपयोग करके सर्वर से जुड़ता है और ग्रीटिंग भेजता है, और फिर प्रतिक्रिया की प्रतीक्षा करता है।
Example
// File Name GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient {
public static void main(String [] args) {
String serverName = args[0];
int port = Integer.parseInt(args[1]);
try {
System.out.println(“Connecting to ” + serverName + ” on port ” + port);
Socket client = new Socket(serverName, port);
System.out.println(“Just connected to ” + client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF(“Hello from ” + client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
System.out.println(“Server says ” + in.readUTF());
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Socket सर्वर उदाहरण (Socket Server Example)
निम्नलिखित ग्रीटिंगसेवर प्रोग्राम एक सर्वर एप्लिकेशन का एक उदाहरण है जो कमांड-लाइन तर्क द्वारा निर्दिष्ट पोर्ट नंबर पर ग्राहकों को सुनने के लिए Socket क्लास का उपयोग करता है –
Example
// File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread {
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException {
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
public void run() {
while(true) {
try {
System.out.println(“Waiting for client on port ” +
serverSocket.getLocalPort() + “…”);
Socket server = serverSocket.accept();
System.out.println(“Just connected to ” + server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF(“Thank you for connecting to ” + server.getLocalSocketAddress()
+ “\nGoodbye!”);
server.close();
} catch (SocketTimeoutException s) {
System.out.println(“Socket timed out!”);
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
public static void main(String [] args) {
int port = Integer.parseInt(args[0]);
try {
Thread t = new GreetingServer(port);
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
क्लाइंट और सर्वर को कंपाइल करें और फिर सर्वर को निम्नानुसार शुरू करें –
$ java GreetingServer 6066
Waiting for client on port 6066…
क्लाइंट प्रोग्राम को निम्नानुसार जांचें –
Output
$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!
हम उम्मीद करते है कि आपको “जावा नेटवर्किंग (Java Networking in Hindi)” से सम्बंधित जानकारी हिंदी में समझ में आयी होंगी यदि आपको बताई गई जानकारी अच्छी लगी हो तो अपने दोस्तों में ऐसे शेयर करे जिससे उनकी भी हेल्प हो सके धन्यवाद!