दिलचस्प पोस्ट
क्यों Rails4 "संपत्ति" समूह के लिए Gemfile में ड्रॉप समर्थन किया था मैं बच्चे वर्ग के नाम को जानने के बिना किसी वस्तु के बाल वर्गों को कैसे उपयोग कर सकता हूं? सरणी में अधिकतम और न्यूनतम मान का सूचकांक Win32 फाइल नाम तुलना C ++ में फ़ंक्शन के निष्पादन समय को मापना NSURL में विशेष वर्ण का उपयोग कैसे करें? MVC में मानक डेटाटैबल्स प्रदर्शित करना सी ++ में मेमोरी लीक "अपरिभाषित व्यवहार" वर्ग की समस्या क्या है? जावास्क्रिप्ट में अचयनित पूर्णांक सामग्री-रेंज और रेंज हेडर के बीच का अंतर? तेजी से सरणी से यादृच्छिक तत्व प्राप्त करें टास्क शेड्यूलर क्यों है। डिफ़ॉल्ट कार्यशेडर्यूलर के साथ? मैं अपने लेआउट को क्षैतिज और लंबवत दोनों कैसे बना सकता हूं? क्यों रैंड ()% 7 हमेशा 0 पर वापस आती है? सरल सीएसएस एनिमेशन लूप – फ़ेडिंग इन एंड आउट "लोडिंग" टेक्स्ट

Android में 2 इम्यूलेटर उदाहरणों को कनेक्ट करना

मैं डेटा और लिखने के लिए 2 एमुलेटर में एक सर्वर और क्लाइंट बनाना चाहता हूं। मैं सर्वर के लिए कोड लिखता हूं:

public class ServerActivity extends Activity { /** Called when the activity is first created. */ private ServerSocket serverSocket = null; private TextView tv; public static final int SERVERPORT = 4444; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv= (TextView) findViewById(R.id.myTextView); try { Connect(); } catch (IOException e) { // TODO Auto-generated catch block tv.setText("Not connected"); e.printStackTrace(); } } public void Connect() throws IOException { serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress("10.0.2.15", 4444)); while(true) { Socket socket = serverSocket.accept(); tv.setText("Connected..."); } } 

और ग्राहक के लिए कोड

 public class ClientActivity extends Activity { /** Called when the activity is first created. */ private Button bt; private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) findViewById(R.id.myButton); tv = (TextView) findViewById(R.id.myTextView); bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub try { Socket socket = new Socket("10.0.2.2", 4445); } catch (UnknownHostException e) { // TODO Auto-generated catch block tv.setText("Error1"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block tv.setText("Error2"); e.printStackTrace(); } } }); } } 

मैं एक रीडायरेक्शन सेट अप कर रहा हूं:

 telnet localhost 5554 redir add tcp:4445:4444 

लेकिन यह कनेक्ट नहीं है …. कृपया मेरी मदद करो मैं इसकी सराहना करता हूं।

Solutions Collecting From Web of "Android में 2 इम्यूलेटर उदाहरणों को कनेक्ट करना"

थोड़ी देर के बाद मुझे इसके साथ सफलता मिली। मैंने या तो सर्वर या क्लाइंट में 10.0.2.15 तक कोई भी संदर्भ नहीं बनाया। मैंने सर्वर सॉकेट को अलग तरह से खोला और कॉमिक्स को एक अलग धागे में संभाला। मैं इम्यूलेटर 5554 पर सर्वर और 5556 पर ग्राहक चलाया

मेरा सर्वर कोड, 6000 पर सुन रहा है

 public class SocketServer extends Activity { ServerSocket ss = null; String mClientMsg = ""; Thread myCommsThread = null; protected static final int MSG_ID = 0x1337; public static final int SERVERPORT = 6000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = (TextView) findViewById(R.id.TextView01); tv.setText("Nothing from client yet"); this.myCommsThread = new Thread(new CommsThread()); this.myCommsThread.start(); } @Override protected void onStop() { super.onStop(); try { // make sure you close the socket upon exiting ss.close(); } catch (IOException e) { e.printStackTrace(); } } Handler myUpdateHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MSG_ID: TextView tv = (TextView) findViewById(R.id.TextView01); tv.setText(mClientMsg); break; default: break; } super.handleMessage(msg); } }; class CommsThread implements Runnable { public void run() { Socket s = null; try { ss = new ServerSocket(SERVERPORT ); } catch (IOException e) { e.printStackTrace(); } while (!Thread.currentThread().isInterrupted()) { Message m = new Message(); m.what = MSG_ID; try { if (s == null) s = ss.accept(); BufferedReader input = new BufferedReader( new InputStreamReader(s.getInputStream())); String st = null; st = input.readLine(); mClientMsg = st; myUpdateHandler.sendMessage(m); } catch (IOException e) { e.printStackTrace(); } } } } } 

मैंने आपके जैसा पोर्ट रीडायरेक्ट किए हैं I

 telnet localhost 5554 redir add tcp:5000:6000 

पोर्ट 5000 पर कनेक्शन स्थापित करने के लिए मेरा क्लाइंट कोड:

 public class SocketClient extends Activity { private Button bt; private TextView tv; private Socket socket; private String serverIpAddress = "10.0.2.2"; // AND THAT'S MY DEV'T MACHINE WHERE PACKETS TO // PORT 5000 GET REDIRECTED TO THE SERVER EMULATOR'S // PORT 6000 private static final int REDIRECTED_SERVERPORT = 5000; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) findViewById(R.id.myButton); tv = (TextView) findViewById(R.id.myTextView); try { InetAddress serverAddr = InetAddress.getByName(serverIpAddress); socket = new Socket(serverAddr, REDIRECTED_SERVERPORT); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { EditText et = (EditText) findViewById(R.id.EditText01); String str = et.getText().toString(); PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println(str); Log.d("Client", "Client sent message"); } catch (UnknownHostException e) { tv.setText("Error1"); e.printStackTrace(); } catch (IOException e) { tv.setText("Error2"); e.printStackTrace(); } catch (Exception e) { tv.setText("Error3"); e.printStackTrace(); } } }); } } 

सर्वर को एक पाठ प्राप्त करने के लिए संदेश प्राप्त होता है, क्लाइंट में एक टेक्स्ट को संदेश भेजने के लिए और इसे भेजने के लिए एक बटन है।

यह महान काम करता है

आपको बस दो चरणों को जोड़ने की आवश्यकता है: 1) AndroidManifest.xml में एप्लिकेशन टैग के बाहर इंटरनेट अनुमति टैग जोड़ें

2) UI थ्रेड पर नेटवर्क प्रतिबंध के कारण Android के साथ काम नहीं करता है 3