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");
}
}
}
你怎麼知道套接字不會連接?它應該拋出一個異常,如果它不能解決主機。是否阻止在一條線上? – madmik3 2011-12-29 23:49:08
嘗試在'IOException'之後添加一個通用的'catch(Exception e)'塊。只是因爲'try'塊沒有遇到可能導致'UnknownHostException'或'IOException'的錯誤並不意味着沒有任何失敗。同時檢查logcat - 如果有其他類型的異常被拋出,它應該被記錄在那裏。 – Squonk 2011-12-29 23:53:20
好吧,我得到了一個錯誤,所有的堆棧跟蹤都表示「權限被拒絕」有什麼線索發生了什麼?我是否需要爲清單或某些內容添加某種權限? – 2011-12-30 00:31:26