2012-04-09 18 views
6

मैं एक एंड्रॉइड एप्लिकेशन (क्लाइंट) विकसित कर रहा हूं और टीसीपी संचार का उपयोग कर अपने जावा सर्वर से कनेक्ट करना चाहता हूं।एंड्रॉइड क्लाइंट और जावा सर्वर टीसीपी संचार

मैं कोड किया है - सरल कार्यक्रम, ग्राहक संदेश और सर्वर इसे वापस इको भेजें - नीचे के रूप में:

सर्वर कोड:

import java.net.*; 


public class Server { 

    public static void main(String[] args) { 

     int nreq = 1; 
     try 
     { 
      ServerSocket sock = new ServerSocket (8080); 
      for (;;) 
      { 
       Socket newsock = sock.accept(); 
       System.out.println("Creating thread ..."); 
       Thread t = new ThreadHandler(newsock,nreq); 
       t.start(); 
      } 
     } 
     catch (Exception e) 
     { 
      System.out.println("IO error " + e); 
     } 
     System.out.println("End!"); 
    } 
} 

एक ही परियोजना फ़ाइल में एक धागा हैंडलर कोड

import java.io.*; 
import java.net.*; 

class ThreadHandler extends Thread { 
    Socket newsock; 
    int n; 

    ThreadHandler(Socket s, int v) { 
     newsock = s; 
     n = v; 
    } 


    public void run() { 
     try { 

      PrintWriter outp = new PrintWriter(newsock.getOutputStream(), true); 
      BufferedReader inp = new BufferedReader(new InputStreamReader(
        newsock.getInputStream())); 

      outp.println("Hello :: enter QUIT to exit \n"); 
      boolean more_data = true; 
      String line; 

      while (more_data) { 
       line = inp.readLine(); 
       System.out.println("Message '" + line + "' echoed back to client."); 
       if (line == null) { 
        System.out.println("line = null"); 
        more_data = false; 
       } else { 
        outp.println("From server: " + line + ". \n"); 
        if (line.trim().equals("QUIT")) 
         more_data = false; 
       } 
      } 
      newsock.close(); 
      System.out.println("Disconnected from client number: " + n); 
     } catch (Exception e) { 
      System.out.println("IO error " + e); 
     } 

    } 
} 

और यह क्लाइंट साइड (Android):

सर्वर

और यह एक्सएमएल फ़ाइल है:

<?xml version="1.0" encoding="utf-8" ?> 
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
    <TextView android:id="@+id/tvText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your message here:" /> 
- <EditText android:id="@+id/etMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10"> 
    <requestFocus /> 
    </EditText> 
    <TextView android:id="@+id/tvStatus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Status..." android:textAppearance="?android:attr/textAppearanceSmall" /> 
    <Button android:id="@+id/bSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send" /> 
    <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Conversation:" android:textAppearance="?android:attr/textAppearanceLarge" /> 
    <TextView android:id="@+id/tvConvo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" /> 
    </LinearLayout> 

मैं इसे चलाने की कोशिश की, लेकिन कुछ नहीं होता। जब मैं बटन पर क्लिक करता हूं तो TextView सर्वर से "हैलो" संदेश नहीं देखता है।

+0

क्या आपके पास 'manifest-permission android: name =" android.permission.INTERNET "/>' आपके manifest.xml में सेट है? – diewie

+0

हां एक इंटरनेट अनुमति है –

उत्तर

9

आप अपने एंड्रॉइड क्लाइंट से localhost पर कनेक्ट हैं।

Socket s = new Socket("localhost", 8080); 

यह केवल तभी काम करेगा जब आपका सर्वर एंड्रॉइड डिवाइस पर चल रहा हो। लेकिन मुझे लगता है कि यह आपके पीसी पर चल रहा है। इसलिए, जब आप एंड्रॉइड एमुलेटर पर अपना ऐप चलाते हैं, तो आप मेजबान से संपर्क करने के लिए 10.0.2.2 से कनेक्ट कर सकते हैं। एक वास्तविक डिवाइस पर, आपको अपने सर्वर आईपी पते को ढूंढना होगा जिसे एंड्रॉइड डिवाइस द्वारा पहुंचा जा सकता है, उदा। वाई-फाई के माध्यम से।

+0

बहुत बहुत धन्यवाद! वह काम किया। –

+0

हाय डिवी, मैं इंटरनेट के माध्यम से अपने पीसी पर क्लाइंट (एंड्रॉइड) को जोड़ने की कोशिश कर रहा हूं, मैं यह कैसे कर सकता हूं? - मैंने इसे वाईफाई के माध्यम से कनेक्ट करने का प्रयास किया और यह मेरे लैपटॉप के आईपी पते के साथ 10.2.0.0 को बदलकर काम किया। –

+1

यह केवल तभी काम करेगा जब आपका पीसी सीधे इंटरनेट से पहुंचा जा सके या संबंधित पोर्ट अग्रेषण नियम मौजूद हों। आपका वर्तमान सेटअप कैसा है? – diewie

0

यदि आपका सर्वर विंडोज पर है, तो स्टार्ट मेनू खोज बॉक्स में cmd टाइप करें और फिर कमांड प्रॉम्प्ट पर ipconfig टाइप करें। आप IVP4 Address----- 192.168.0.101 जैसे कुछ देखेंगे। आपको अपने क्लाइंट पर इस पते और पोर्ट नंबर का उपयोग करने की आवश्यकता है।

संबंधित मुद्दे