मेरे पास एक ऐसा एप्लिकेशन है जहां मुझे सॉकेट कनेक्शन बनाने की आवश्यकता है। मेरी आवश्यकता यह है कि, जब मेरा सॉकेट कनेक्शन स्थापित हो जाता है तो इसे ज़िंदा रहने की आवश्यकता होती है जब तक कि मैं इसे व्यक्तिगत रूप से बंद न कर लेता। हर 3 मिनट में मुझे दूसरी तरफ डेटा पैकेट भेजना पड़ता है। क्या कोई मुझे कुछ कोड नमूना प्रदान कर सकता है जिससे मुझे ऐसा करने में मदद मिलेगी? एंड्रॉयड मेंएंड्रॉइड में सॉकेट कनेक्शन कैसे बनाएं?
उत्तर
सॉकेट कनेक्शन जावा में के रूप में ही कर रहे हैं: http://www.oracle.com/technetwork/java/socket-140484.html
चीजें आप के बारे में पता करने की आवश्यकता है:
- फोन अपने ऐप अब निष्पादित करेंगे निष्क्रिय हो जाती है, इसलिए यदि सॉकेट अंत में होगा समय समाप्त। आप इसे लॉक लॉक से रोक सकते हैं। यह बैटरी बैटरी को काफी हद तक खाएगा - मुझे पता है कि मैं उस ऐप का उपयोग नहीं करूंगा।
- यदि आप लगातार ऐसा करते हैं, तब भी जब आपका ऐप सक्रिय नहीं होता है, तो आपको सेवा का उपयोग करने की आवश्यकता होती है।
- किसी भी समय ओएस द्वारा गतिविधियां और सेवाएं मार दी जा सकती हैं, खासकर यदि वे एक निष्क्रिय ऐप का हिस्सा हैं। अगर आप अपने कोड की निर्धारित फांसी की जरूरत
AlarmManager
पर एक नजर डालें।
क्या आपको अपना कोड चलाने और डेटा प्राप्त करने की आवश्यकता है भले ही उपयोगकर्ता ऐप का उपयोग न करे (यानी ऐप निष्क्रिय है)?
मेरे लिए आपका उत्तर किसी भी चीज़ से ज्यादा है। मुझे बस एक सॉकेट की तुलना में सब कुछ चाहिए। दोस्त बहुत - बहुत धन्यवाद – bharath
सरल सॉकेट सर्वर अनुप्रयोग उदाहरण
मैं पहले से ही में एक ग्राहक उदाहरण पोस्ट किया है: https://stackoverflow.com/a/35971718/895245, इसलिए यहाँ एक सर्वर उदाहरण चला जाता है।
यह उदाहरण ऐप एक सर्वर चलाता है जो इनपुट के आरओटी -1 साइफर लौटाता है।
आपको फिर Exit
बटन + कुछ नींद देरी जोड़ने की आवश्यकता होगी, लेकिन यह आपको प्रारंभ करना चाहिए। कुछ पंक्तियाँ साथ https://android.stackexchange.com/a/130468/126934
netcat $PHONE_IP 12345
- एप्लिकेशन
- एक लैन
- पर अपने फोन और पीसी मिल स्थापित लगता है:
इसके साथ खेलने के लिये
एंड्रॉइड सॉकेट हैं जावा के समान, सिवाय इसके कि हमें कुछ अनुमति मुद्दों से निपटना होगा। How to fix android.os.NetworkOnMainThreadException?
package com.cirosantilli.android_cheat.socket;
import android.app.Activity;
import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Main extends Activity {
static final String TAG = "AndroidCheatSocket";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Main.TAG, "onCreate");
Main.this.startService(new Intent(Main.this, MyService.class));
}
public static class MyService extends IntentService {
public MyService() {
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d(Main.TAG, "onHandleIntent");
final int port = 12345;
ServerSocket listener = null;
try {
listener = new ServerSocket(port);
Log.d(Main.TAG, String.format("listening on port = %d", port));
while (true) {
Log.d(Main.TAG, "waiting for client");
Socket socket = listener.accept();
Log.d(Main.TAG, String.format("client connected from: %s", socket.getRemoteSocketAddress().toString()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
for (String inputLine; (inputLine = in.readLine()) != null;) {
Log.d(Main.TAG, "received");
Log.d(Main.TAG, inputLine);
StringBuilder outputStringBuilder = new StringBuilder("");
char inputLineChars[] = inputLine.toCharArray();
for (char c : inputLineChars)
outputStringBuilder.append(Character.toChars(c + 1));
out.println(outputStringBuilder);
}
}
} catch(IOException e) {
Log.d(Main.TAG, e.toString());
}
}
}
}
AndroidManifest:
src/com/cirosantilli/android_cheat/सॉकेट
हम एक Service
या अन्य पृष्ठभूमि विधि वरना जरूरत है।एक्सएमएल
जोड़ना होगा: <uses-permission android:name="android.permission.INTERNET" />
वरना: Java socket IOException - permission denied
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cirosantilli.android_cheat.socket"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="22" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="AndroidCheatsocket">
<activity android:name="Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".Main$MyService" />
</application>
</manifest>
GitHub पर एक build.xml
साथ: https://github.com/cirosantilli/android-cheat/tree/92de020d0b708549a444ebd9f881de7b240b3fbc/socket
यहाँ, इस पोस्ट में आप उपकरणों के बीच या बीच सॉकेट की स्थापना के लिए विस्तृत कोड मिलेगा एक ही मोबाइल में दो आवेदन।
आप नीचे दिए गए कोड का परीक्षण करने के दो आवेदन बनाना होगा। क्लाइंट सॉकेट
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:id="@+id/tr_send_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="11dp">
<EditText
android:id="@+id/edt_send_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:hint="Enter message"
android:inputType="text" />
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="Send" />
</TableRow>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/tr_send_message"
android:layout_marginTop="25dp"
android:id="@+id/scrollView2">
<TextView
android:id="@+id/tv_reply_from_server"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
</RelativeLayout>
:
दोनों आवेदन के मैनिफ़ेस्ट फ़ाइल में, अनुमति
<uses-permission android:name="android.permission.INTERNET" />
1 अनुप्रयोग कोड के नीचे जोड़ने
MainActivity.java
import android.os.Bundle; import android.os.Handler; 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; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; /** * Created by Girish Bhalerao on 5/4/2017. */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView mTextViewReplyFromServer; private EditText mEditTextSendMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button buttonSend = (Button) findViewById(R.id.btn_send); mEditTextSendMessage = (EditText) findViewById(R.id.edt_send_message); mTextViewReplyFromServer = (TextView) findViewById(R.id.tv_reply_from_server); buttonSend.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_send: sendMessage(mEditTextSendMessage.getText().toString()); break; } } private void sendMessage(final String msg) { final Handler handler = new Handler(); Thread thread = new Thread(new Runnable() { @Override public void run() { try { //Replace below IP with the IP of that device in which server socket open. //If you change port then change the port number in the server side code also. Socket s = new Socket("xxx.xxx.xxx.xxx", 9002); OutputStream out = s.getOutputStream(); PrintWriter output = new PrintWriter(out); output.println(msg); output.flush(); BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); final String st = input.readLine(); handler.post(new Runnable() { @Override public void run() { String s = mTextViewReplyFromServer.getText().toString(); if (st.trim().length() != 0) mTextViewReplyFromServer.setText(s + "\nFrom Server : " + st); } }); output.close(); out.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } }); thread.start(); } }
2 अनुप्रयोग कोड - सर्वर सॉकेट
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_stop_receiving" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="STOP Receiving data" android:layout_alignParentTop="true" android:enabled="false" android:layout_centerHorizontal="true" android:layout_marginTop="89dp" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/btn_stop_receiving" android:layout_marginTop="35dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> <TextView android:id="@+id/tv_data_from_client" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" /> </ScrollView> <Button android:id="@+id/btn_start_receiving" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="START Receiving data" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="14dp" /> </RelativeLayout>
MainActivity.java
import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * Created by Girish Bhalerao on 5/4/2017. */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { final Handler handler = new Handler(); private Button buttonStartReceiving; private Button buttonStopReceiving; private TextView textViewDataFromClient; private boolean end = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); buttonStartReceiving = (Button) findViewById(R.id.btn_start_receiving); buttonStopReceiving = (Button) findViewById(R.id.btn_stop_receiving); textViewDataFromClient = (TextView) findViewById(R.id.tv_data_from_client); buttonStartReceiving.setOnClickListener(this); buttonStopReceiving.setOnClickListener(this); } private void startServerSocket() { Thread thread = new Thread(new Runnable() { private String stringData = null; @Override public void run() { try { ServerSocket ss = new ServerSocket(9002); while (!end) { //Server is waiting for client here, if needed Socket s = ss.accept(); BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter output = new PrintWriter(s.getOutputStream()); stringData = input.readLine(); output.println("FROM SERVER - " + stringData.toUpperCase()); output.flush(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } updateUI(stringData); if (stringData.equalsIgnoreCase("STOP")) { end = true; output.close(); s.close(); break; } output.close(); s.close(); } ss.close(); } catch (IOException e) { e.printStackTrace(); } } }); thread.start(); } private void updateUI(final String stringData) { handler.post(new Runnable() { @Override public void run() { String s = textViewDataFromClient.getText().toString(); if (stringData.trim().length() != 0) textViewDataFromClient.setText(s + "\n" + "From Client : " + stringData); } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_start_receiving: startServerSocket(); buttonStartReceiving.setEnabled(false); buttonStopReceiving.setEnabled(true); break; case R.id.btn_stop_receiving: //stopping server socket logic you can add yourself buttonStartReceiving.setEnabled(true); buttonStopReceiving.setEnabled(false); break; } } }
- 1. एंड्रॉइड में असुरक्षित आरएफसीओएमएम सॉकेट कैसे बनाएं?
- 2. सॉकेट कनेक्शन
- 3. टाइप सॉकेट की विशेष फाइलें कैसे बनाएं?
- 4. एकाधिक सॉकेट कनेक्शन
- 5. मौजूदा सॉकेट कनेक्शन
- 6. पायथन सॉकेट कनेक्शन टाइमआउट
- 7. सॉकेट कनेक्शन हानि को अनुकरण कैसे करें?
- 8. आउटगोइंग सॉकेट कनेक्शन का नकल कैसे करें?
- 9. एक देशी सॉकेट से बूस्ट.एसीओ सॉकेट कैसे बनाएं?
- 10. एंड्रॉइड - सॉकेट बनाम मतदान
- 11. टीसीपी/आईपी सॉकेट कनेक्शन में रीसेट भेजना
- 12. एंड्रॉइड में बीप कैसे बनाएं?
- 13. एंड्रॉइड में टेक्स्टएरिया कैसे बनाएं
- 14. एंड्रॉइड में फ़ाइल कैसे बनाएं?
- 15. टीसीपी सॉकेट कोई कनेक्शन टाइमआउट
- 16. पृष्ठभूमि में वीओआईपी सॉकेट कनेक्शन कैसे बनाए रखें?
- 17. Boost :: asio में सॉकेट कनेक्शन लाइव होने पर कैसे जांचें?
- 18. एंड्रॉइड में वाईफाई कनेक्शन कैसे फ़िल्टर करें?
- 19. स्ट्रिंग चर से टेक्स्ट कनेक्शन कैसे बनाएं?
- 20. लगातार टीसीपी कनेक्शन कैसे बनाएं/अनुकरण करें?
- 21. एंड्रॉइड - सर्वर सॉकेट
- 22. एंड्रॉइड सॉकेट अपवाद "सॉकेट बंद है"
- 23. स्थानीयहोस्ट कनेक्शन तक सीमित सॉकेट बनाना केवल
- 24. सॉकेट कनेक्शन और टीसीपी कनेक्शन के बीच कोई अंतर?
- 25. एंड्रॉइड सर्वर सॉकेट
- 26. एंड्रॉइड सॉकेट फ़ाइल स्थानांतरण
- 27. एंड्रॉइड पर आईपीवी 6 सॉकेट
- 28. एंड्रॉइड पर कच्चे सॉकेट
- 29. एसएसएल पर गैर-अवरुद्ध सॉकेट कनेक्शन?
- 30. एंड्रॉइड में उलटी गिनती टाइमर कैसे बनाएं?
यदि आप किसी सर्वर सॉकेट बनाने का प्रयास करते हैं, उदाहरण के हैं एक सॉकेट जो दूसरों से जुड़ जाएगी? –
पीटर पूछने के लिए धन्यवाद। लेकिन मैंने इसे हल कर लिया है। बहुत बहुत धन्यवाद –
हां मैंने आपके द्वारा स्वीकार किए गए उत्तर को देखा। यदि आप मोबाइल डिवाइस पर सर्वर चलाने की योजना बना रहे हैं तो उस उत्तर पर मेरी टिप्पणी देखें। –