2012-10-14 106 views
3

好的,我正在做一些看起來應該很容易的事情。我基本上試圖打開一個ServerSocket連接,然後等待客戶端連接。如何在我的android應用程序中打開一個ServerSocket?

這是我的代碼。

ServerSocket serverSocket = new ServerSocket(6543); 
Socket clientSocket = serverSocket.accept(); 

每當我的代碼命中,serverSocket.accept();,我拋出以下異常。

bind failed: EADDRINUSE (Address already in use) 

所以很明顯,我的下一步是檢查,看看另一個端口是否會工作,它沒有。接下來,我重新啓動設備,並嘗試運行應用程序,我得到了同樣的例外。我已經給了我的應用程序INTERNET許可,並且該設備已根植。

這裏是我的網絡接口,顯示出來。

lo: ::1%1 
lo: 127.0.0.1 
eth0: //IPV6 address 
eth0: 192.168.1.127 

編輯1

這裏是ServerSocket對象信息進行調試時,我得到的。

ServerSocket[addr=192.168.1.121/192.168.1.121,port=0,localport=1234] 

EDIT 2

,我有以下可用的構造函數在我的ServerSocket

new ServerSocket(int port) 
new ServerSocket(int port, int backlog) 
new ServerSocket(int port, int backlog, InetAddress localAddress) 

我用3號構造和同樣的異常嘗試。

new ServerSocket(4567, 0, InetAddress.getLocalHost()); 
+0

對,讓我知道它是怎麼回事! –

+0

是的,我沒有在那裏的文件,也轉身,並在手機和模擬器上測試了這一點,我收到了同樣的例外。 – meanbunny

+0

如果你刪除serverSocket.accept()是否有效? –

回答

1

好了,所以我終於想通了,爲什麼我的申請被拋出一個異常,如果任何人有這方面的一些意見或想提供一個答案,爲什麼這是怎麼回事。我將不勝感激。

因此,在我創建的主題中,我需要回發到主線程來根據服務器連接發生的情況更新一些TextView。那麼,因爲我不能從我自己創建的線程更新主線程,我需要添加一個Handler對象到該線程以更新UI。刪除該處理程序完全允許我的應用程序成功創建ServerSocket而不會引發異常。

處理程序是否以某種方式事先運行代碼或在此處發生了什麼?

代碼。

RemoteServerRunnable test = new RemoteServerRunnable(); 
Handler handler = new Handler(); 
handler.post(test); 
test.start(); 
+0

再次對我+1:D 保重。 –

+0

謝謝,這是一個艱難的! – meanbunny

相關問題