2013-10-18 187 views
1

連接一個android應用程序(作爲客戶端)和運行在我的機器上(作爲服務器)的應用程序我試圖通過一個android應用程序(它將作爲客戶端)和一個java應用程序(作爲服務器)在我的電腦上運行。雖然我的應用程序非常簡單,但它在我的Android設備上崩潰。 任何人都可以幫我嗎?我將報告下面的代碼片段..通過套接字

服務器端

public class Server { 
    public static void main(String args[]){ 
    try { 
     ServerSocket ss=new ServerSocket(9090); 
     Socket client=ss.accept(); 
     System.out.println("A request is arrived"); 
     ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream()); 
     PrintWriter out=new PrintWriter(oos,true); 
     out.write("Hello..I'm the Server"); 
     out.flush(); out.close(); client.close(); 
     } catch(Exception e){e.printStackTrace();} 
     } 
    } 

客戶端

public class ChildActivity extends Activity{ 
    public static final int SERVERPORT = 9090; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_child); 
    Button b=(Button) findViewById(R.id.button1); 
    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      try { 
       InetAddress addre=InetAddress.getByName("a.b.c.d"); //ip address got typing command ipconfig in windows 
       Socket socket=new Socket(addre,9090); 
       ObjectInputStream in=new ObjectInputStream(socket.getInputStream()); 
       String msg=(String) in.readObject(); 
       Toast.makeText(getBaseContext(), msg, Toast.LENGTH_LONG).show(); 
       in.close(); 
       } catch (Exception e) {e.printStackTrace();} 


       } 
     } 
    });... and so on }} 

我還包含下列文件清單的權限,因爲我的手機連接上互聯網通過Wi-Fi。

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

每種幫助都很受讚賞...再次感謝。 ps。對不起,我的英語:P

+2

如果沒有來自logcat的堆棧跟蹤,我們無能爲力。這完全告訴你**問題出在哪裏,但我的猜測是'networkOnMainThreadException'。 – Simon

回答

0

你最propably得到一個 「無網絡-ON-主線程」 的異常。 Android不允許您在主線程上執行IO操作,因爲這會阻止UI並導致應用程序無法響應屏幕。您可以使用AsyncTask在後臺執行IO操作。