2010-08-05 739 views
1

如何在android中打開特定的端口?如何在Android中打開端口?

我有一個服務器套接字,但連接因端口關閉而被拒絕。

try { 
    ServerSocket server = new ServerSocket(2021); 
    Socket client = server.accept(); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    a = false; 
    e.printStackTrace(); 
} 
+0

告訴我們你到目前爲止所做的嘗試,並向我們展示一些代碼。此外 - 重複相同的問題在這裏被認爲是不好的。 – 2010-08-05 14:31:40

+0

也許應用程序必須有INTERNET許可。覈實。 – FeelGood 2011-11-12 05:50:04

回答

0

看起來你只是缺少圍繞accept()調用一個循環,這樣你能接受多個連接。事情是這樣的:

ServerSocket server = new ServerSocket(port); 

while (true) 
{ 
    Socket client = server.accept(); 
    ProcessClientRequest(client); 
} 
+0

並將它接受到一個單獨的線程中,以便它可以異步執行其工作,而不是一次一個。 – 2010-08-05 16:33:29

+1

嘆息......它不一定是線程。只需支付你所需要的。 – 2010-08-05 16:35:48

0

爲了說明我在我的評論的意思是:

ServerSocket server = new ServerSocket(port); 
while (true) 
{ 
    Socket client = server.accept(); 
    new Thread() { 
     final Socket _client = client; 
     // This stuff runs in a separate thread all by itself 
     public void run() { 
      ProcessClientRequest(_client); 
     } 
    }.start(); 
} 
1

如果你還沒有帶得到它的工作,我建議你創建可擴展條條一個內部類以取代整個new Thread() { ... }.start()聲明(當我嘗試聲明一個實例字段時,我始終難以使這些工作正確,我只是堅持在這種聲明中創建/覆蓋方法)。我會讓內部類如ClientAnsweringThread擁有一個構造函數,它將Socket(client)作爲參數,然後像run()那樣調用ProcessClientRequest(_client);方法。