2011-12-29 360 views
0

我已經做了大量的研究,並嘗試了各種方法來實現它。我有一個C#服務器,它接受套接字192.168.0.101:18250上的通信。我有下面的代碼(下面),它是應用程序的主要活動。我編碼的方式是,一切都在onCreate方法,所以套接字應該在應用程序啓動後立即連接,但在我的服務器上我沒有看到它連接。服務器是完美的,我認爲它沒有問題。我還嘗試了一款來自市場的應用程序,以查看我的手機是否可以連接到服務器,並從該應用程序通過套接字進行通信。這是我在幾分鐘內扔在一起的代碼來測試套接字連接,但不管我嘗試套接字只是不會連接。也沒有任何例外拋出!Android客戶端服務器

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

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.*; 

public class ClientServerTestActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 

     InetAddress addr = InetAddress.getByName("192.168.0.101"); 
     int port = 18250; 

     // This constructor will block until the connection succeeds 
     Socket socket = new Socket(addr, port); 
     socket.getOutputStream(); 
     BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
     wr.write("Hello World"); 
     wr.flush(); 

    } catch (UnknownHostException e) { 

     TextView t=(TextView)findViewById(R.id.textView1); 
     t.setText(t.getText() + e.getMessage() + "\r\n"); 

    } catch (IOException e) { 

     TextView t=(TextView)findViewById(R.id.textView1); 
     t.setText(t.getText() + e.getMessage() + "\r\n"); 
    } 
} 
} 
+0

你怎麼知道套接字不會連接?它應該拋出一個異常,如果它不能解決主機。是否阻止在一條線上? – madmik3 2011-12-29 23:49:08

+0

嘗試在'IOException'之後添加一個通用的'catch(Exception e)'塊。只是因爲'try'塊沒有遇到可能導致'UnknownHostException'或'IOException'的錯誤並不意味着沒有任何失敗。同時檢查logcat - 如果有其他類型的異常被拋出,它應該被記錄在那裏。 – Squonk 2011-12-29 23:53:20

+0

好吧,我得到了一個錯誤,所有的堆棧跟蹤都表示「權限被拒絕」有什麼線索發生了什麼?我是否需要爲清單或某些內容添加某種權限? – 2011-12-30 00:31:26

回答

1

問題不在代碼中,問題出現在清單中。我必須將此行添加到清單才能授予應用程序打開網絡套接字的權限。

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

希望它可以幫助別人! :)