2013-06-22 91 views
0

我試圖製作服務器套接字來偵聽客戶端輸入流,但是當我執行start_listening()方法時,程序卡住了。我甚至試圖去除循環,但我仍然有同樣的問題。我想它會等待客戶端的交互。在程序還在工作的時候,還有其他的方法可以聽嗎?通過套接字偵聽客戶端時程序凍結

public static void start_listening(){ 

listener = new ServerSocket(9090); 

while (true) {   
Socket socket = listener.accept();  
ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); 
us = (User) in.readObject(); 
} 

} 

回答

2

當使用套接字技術時,accept()阻止當前線程的執行,直到客戶端連接到偵聽套接字。這是一個定義的行爲。 Java documentation說:「方法[accept()]阻塞,直到建立連接。」讓服務器在無限循環內運行可以。

所以,爲了讓這個整體運行,你可能想看看this socket example which uses threads。在的run()方法內,您將處理您的用戶對象。

+0

謝謝,這真的很有幫助。 –

+0

不客氣:) – actc

0

你可能只使用一個Booleanflag指示何時結束,而loop.Other明智循環保持迭代,因爲它從來沒有斷。

while (true) { //will it ever breaks ?? 

} 
+0

我刪除了循環,它仍然卡住 –

1

除此之外循環永遠不會結束(我想你會在某個時候突破),你應該做這樣的東西在一個單獨的ThreadAsyncTask,做接受主線程使得Andriod的凍結,直到有人連接到插座。這就是爲什麼你的程序卡住了。

+0

謝謝,我會盡量找到一種方法來分開它們。 –