यह उदाहरण Android में क्लाइंट-सर्वर प्रोग्रामिंग के बारे में प्रदर्शित करता है
सर्वर और क्लाइंट प्रोजेक्ट चाहिए
सर्वर
चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें।
चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें।
<टेक्स्ट व्यू एंड्रॉइड:आईडी ="@+ id/tvConnectionStatus" android:layout_width ="match_parent" android:layout_height ="wrap_content" android:layout_below ="@+id/tvPort" android:textAppearance ="@s tyle/Base.TextAppearance.AppCompat.Medium" />
चरण 3 - निम्न कोड को src/MainActivity.java
में जोड़ें <पूर्व>पैकेज com.server.myapplication.server;import android.annotation.SuppressLint;import android.net.wifi.WifiInfo;import android.net.wifi.WifiManager;import android.os.Bundle;import android.support.v7 .app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java. io.InputStreamReader; आयात java.io.PrintWriter; आयात java.net.InetAddress; आयात java.net.ServerSocket; आयात java.net.Socket; आयात java.net.UnknownHostException; java.nio.ByteBuffer आयात करें; java.nio आयात करें .ByteOrder;@SuppressLint("SetTextI18n") Public Class MainActivity, AppCompatActivity { ServerSocket serverSocket; थ्रेड थ्रेड1 =अशक्त; टेक्स्ट व्यू टीवीआईपी, टीवीपोर्ट; टेक्स्ट व्यू टीवी संदेश; संपादन टेक्स्ट और संदेश; बटन btnभेजें; सार्वजनिक स्थैतिक स्ट्रिंग SERVER_IP =""; सार्वजनिक स्थैतिक अंतिम int SERVER_PORT =8080; स्ट्रिंग संदेश; @Override संरक्षित शून्य पर क्रिएट (बंडल सेव किया गया इंस्टेंसस्टेट) {super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); टीवीआईपी =FindViewById (R.id.tvIP); टीवीपोर्ट =FindViewById (R.id.tvPort); tvMessages =findViewById (R.id.tvMessages); etMessage =findViewById (R.id.etMessage); btnSend =findViewById (R.id.btnSend); कोशिश करें {SERVER_IP =getLocalIpAddress (); } कैच (अज्ञातहोस्ट एक्सेप्शन ई) { ई.प्रिंटस्टैकट्रेस (); } थ्रेड 1 =नया थ्रेड (नया थ्रेड 1 ()); थ्रेड1.स्टार्ट (); btnSend.setOnClickListener (नया दृश्य। OnClickListener () {@ ओवरराइड सार्वजनिक शून्य पर क्लिक करें (देखें v) { संदेश =etMessage.getText ()। toString ()। ट्रिम (); अगर (!message.isEmpty ()) {नया धागा ( नया थ्रेड 3 (संदेश))। प्रारंभ (); }}}); } निजी स्ट्रिंग getLocalIpAddress () UnknownHostException फेंकता है {WifiManager wifiManager =(WifiManager) getApplicationContext ()। getSystemService (WIFI_SERVICE); वाईफ़ाई प्रबंधक पर जोर दें! =शून्य; WifiInfo wifiInfo =wifiManager.getConnectionInfo (); int ipInt =wifiInfo.getIpAddress (); वापसी InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress(); } निजी PrintWriter आउटपुट; निजी BufferedReader इनपुट; कक्षा थ्रेड 1 रननेबल लागू करता है {@ ओवरराइड सार्वजनिक शून्य रन() {सॉकेट सॉकेट; कोशिश करें {सर्वर सॉकेट =नया सर्वर सॉकेट (SERVER_PORT); runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () { tvMessages.setText ("कनेक्ट नहीं है"); tvIP.setText ("IP:" + SERVER_IP); tvPort.setText ("पोर्ट:" + String.valueOf ( सर्वर पोर्ट)); } }); कोशिश करें {सॉकेट =सर्वर सॉकेट। स्वीकार करें (); आउटपुट =नया प्रिंटवाइटर (सॉकेट.गेटऑटपुटस्ट्रीम ()); इनपुट =नया BufferedReader (नया इनपुटस्ट्रीम रीडर (सॉकेट.getInputStream ())); runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () {tvMessages.setText ("कनेक्टेड \ n"); }}); नया थ्रेड (नया थ्रेड 2 ())। प्रारंभ (); } कैच (IOException e) { e.printStackTrace (); } } कैच (IOException e) { e.printStackTrace (); } } } निजी वर्ग थ्रेड 2 रननेबल लागू करता है {@ ओवरराइड सार्वजनिक शून्य रन () {जबकि (सत्य) {कोशिश करें {अंतिम स्ट्रिंग संदेश =इनपुट। रीडलाइन (); अगर (संदेश! =शून्य) {runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () { tvMessages.append ("क्लाइंट:" + संदेश + "\ n"); }}); } और {थ्रेड 1 =नया थ्रेड (नया थ्रेड 1 ()); थ्रेड1.स्टार्ट (); वापसी; } } कैच (IOException e) { e.printStackTrace (); } } } } क्लास थ्रेड3 रननेबल को लागू करता है {निजी स्ट्रिंग संदेश; थ्रेड 3 (स्ट्रिंग संदेश) {यह संदेश =संदेश; } @ ओवरराइड सार्वजनिक शून्य रन () {output.write (संदेश); आउटपुट। फ्लश (); runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () { tvMessages.append ("सर्वर:" + संदेश + "\ n"); etMessage.setText (""); }}); } }}चरण 4 - निम्नलिखित कोड को androidManifest.xml में जोड़ें
<एप्लिकेशन android:allowBackup ="true" android:icon ="@mipmap/ic_launcher" android:label ="@string/app_name" android:roundIcon ="@mipmap/ic_launcher_round" android:supportsRtl ="true" android:theme ="@style/AppTheme"> <गतिविधि android:name =".MainActivity" android:label ="सर्वर"> <इरादे-फ़िल्टर> <कार्रवाई android:name ="android.intent.action.MAIN" /> <श्रेणी android:name ="android.intent.category.LAUNCHER" /> इरादे-फ़िल्टर> गतिविधि>
ग्राहक
चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें।
चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें।
<बटन एंड्रॉइड:आईडी ="@ + आईडी /btnConnect" android:layout_width ="match_parent" android:layout_height ="wrap_content" android:layout_below ="@+id/etPort" android:layout_gravity ="center" android:layout_marginT op ="16dp" android:text ="सर्वर से कनेक्ट करें" />
चरण 3 - निम्न कोड को res/layout/MainActivity.java में जोड़ें।
<पूर्व>पैकेज com.client.myapplication.client;import android.annotation.SuppressLint;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;आयात android.widget.EditText;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket; @SuppressLint("SetTextI18n")सार्वजनिक वर्ग MainActivity AppCompatActivity {Thread Thread1 =null; एडिटटेक्स्ट एटआईपी, एटपोर्ट; टेक्स्ट व्यू टीवी संदेश; संपादन टेक्स्ट और संदेश; बटन btnभेजें; स्ट्रिंग SERVER_IP; इंट सर्वर_पोर्ट; @Override संरक्षित शून्य पर क्रिएट (बंडल सेव किया गया इंस्टेंसस्टेट) {super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); etIP =findViewById (R.id.etIP); etPort =findViewById (R.id.etPort); tvMessages =findViewById (R.id.tvMessages); etMessage =findViewById (R.id.etMessage); btnSend =findViewById (R.id.btnSend); बटन btnConnect =findViewById (R.id.btnConnect); btnConnect.setOnClickListener (नया दृश्य। OnClickListener () {@ ओवरराइड सार्वजनिक शून्य पर क्लिक करें (देखें v) { tvMessages.setText (""); SERVER_IP =etIP.getText ()। toString ()। ट्रिम (); SERVER_PORT =Integer.parseInt (etPort.getText ()। toString ()। ट्रिम ()); थ्रेड 1 =नया थ्रेड (नया थ्रेड 1 ()); थ्रेड 1.स्टार्ट (); }}); btnSend.setOnClickListener (नया दृश्य। OnClickListener () {@ ओवरराइड सार्वजनिक शून्य पर क्लिक करें (देखें v) {स्ट्रिंग संदेश =etMessage.getText ()। (नया थ्रेड 3 (संदेश))। प्रारंभ (); } } }); } निजी PrintWriter आउटपुट; निजी BufferedReader इनपुट; कक्षा थ्रेड 1 रननेबल लागू करता है {@ ओवरराइड सार्वजनिक शून्य रन() {सॉकेट सॉकेट; कोशिश करें {सॉकेट =नया सॉकेट (SERVER_IP, SERVER_PORT); आउटपुट =नया प्रिंटवाइटर (सॉकेट.गेटऑटपुटस्ट्रीम ()); इनपुट =नया BufferedReader (नया इनपुटस्ट्रीम रीडर (सॉकेट.getInputStream ())); runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () {tvMessages.setText ("कनेक्टेड \ n"); }}); नया थ्रेड (नया थ्रेड 2 ())। प्रारंभ (); } कैच (IOException e) { e.printStackTrace (); } } } क्लास थ्रेड2 रननेबल को लागू करता है {@Override public void run() { जबकि (true) { try { final String message =input.readLine(); अगर (संदेश! =शून्य) {runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () { tvMessages.append ("सर्वर:" + संदेश + "\ n"); }}); } और {थ्रेड 1 =नया थ्रेड (नया थ्रेड 1 ()); थ्रेड1.स्टार्ट (); वापसी; } } कैच (IOException e) { e.printStackTrace (); } } } } क्लास थ्रेड3 रननेबल को लागू करता है {निजी स्ट्रिंग संदेश; थ्रेड 3 (स्ट्रिंग संदेश) {यह संदेश =संदेश; } @ ओवरराइड सार्वजनिक शून्य रन () {output.write (संदेश); आउटपुट। फ्लश (); runOnUiThread (नया रननेबल () {@ ओवरराइड सार्वजनिक शून्य रन () { tvMessages.append ("क्लाइंट:" + संदेश + "\ n"); etMessage.setText (""); }}); } }}चरण 4 - निम्नलिखित कोड को androidManifest.xml में जोड़ें
<मेनिफेस्ट xmlns:android ="https://schemas.android.com/apk/res/android" package ="com.client. myapplication.client"> <उपयोग-अनुमति android:name ="android.permission.INTERNET" /><गतिविधि एंड्रॉइड:नाम ="com.client.myapplication.client.MainActivity" एंड्रॉइड:लेबल ="क्लाइंट"> <इरादे-फ़िल्टर> <कार्रवाई एंड्रॉइड:नाम ="android.intent.action.MAIN" /> <श्रेणी एंड्रॉइड:नाम =" android.intent.category.LAUNCHER" />
आइए आपके सर्वर और क्लाइंट एप्लिकेशन दोनों को चलाने का प्रयास करें। मुझे लगता है कि आपने अपने वास्तविक Android मोबाइल डिवाइस को अपने कंप्यूटर से कनेक्ट कर लिया है। एंड्रॉइड स्टूडियो से ऐप चलाने के लिए, अपने प्रोजेक्ट की गतिविधि फाइलों में से एक को खोलें और रन पर क्लिक करें टूलबार से आइकन। एक विकल्प के रूप में अपने मोबाइल डिवाइस का चयन करें और फिर अपने मोबाइल डिवाइस की जांच करें जो आपकी डिफ़ॉल्ट स्क्रीन प्रदर्शित करेगा -
सर्वर:-
ग्राहक:-
सर्वर:-