2015-04-01 84 views
1

我有這段代碼,我只是下載它。socket.accept()不執行

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

public class Server { 
public static void main(String argv[]) throws Exception 
{ 
    String clientSentence; 
    String capitalizedSentence; 
    ServerSocket welcomeSocket = new ServerSocket(6060); 

    while(true) 
    { 
     Socket connectionSocket = welcomeSocket.accept(); 
     System.out.println("ssss"); 
     BufferedReader inFromClient = 
      new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     clientSentence = inFromClient.readLine(); 
     System.out.println("Received: " + clientSentence); 
     capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
     outToClient.writeBytes(capitalizedSentence); 
    } 
} 

}

首先,它跑得非常好,然後當我試圖運行它背上它運行,但它並沒有達到print語句:

System.out.println("ssss"); 

它停在welcomeSocket.accept();

即使我嘗試了一箇舊的服務器代碼,但在它也沒有運行之前,它仍然停留在同一部分,但是它從linux終端運行。

回答

2

它按預期工作。 .accept()函數是一個阻塞函數,這意味着.accept()等待連接嘗試並將代碼保存在那裏。

如果您連接到服務器,它將移動到那一點,打印一次sss,並在執行while循環的其餘部分之後,再次卡在那裏直到您建立新的連接。

+0

是的你是對的。謝謝 – 2015-04-01 18:07:13