2014-05-11 175 views
1

我試圖測試客戶端/服務器教程示例提供by Oracle,並進行了一些小的調整。理想情況下,我會在我的客戶端中寫入「打印內容」到我的BufferedReader中,stdIn,服務器在收到此字符串時會打印出「客戶端和服務器已連接!」。Java客戶端/服務器套接字程序 - 服務器沒有響應客戶端請求

我的代碼編譯,看起來連接成功。不過,我的服務器此時不打印任何內容。

以下是我的客戶端代碼:

public class myClient { 

public static void main(String[] args) throws IOException { 

    String hostName = // my computer's local host name; 
    int portNumber = 4444; 

    try ( 
     Socket clientSocket = new Socket(hostName, portNumber); 
     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    ) { 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 

     // Tell server to print line "Client and server have connected!"; 
     String fromServer; 
     String fromUser; 

     while ((fromServer = in.readLine()) != null) { 
      if (fromServer.equals("End")) 
       break; 

      fromUser = stdIn.readLine(); 

      if (fromUser != null) 
       out.println(fromUser); 
     } 

    } catch (UnknownHostException e) { 
     System.err.println("Don't know host!"); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("IO Exception caught!"); 
     System.exit(1); 
    } 

} 

} 

以下是我的服務器代碼:

public class myServer { 

public static void main(String[] args) throws IOException { 

    int portNumber = 4444; 

    try (
     ServerSocket serverSocket = new ServerSocket(portNumber); 
     Socket clientSocket = serverSocket.accept(); 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    ) { 

     // if receieved string is "print stuff", print "Client and server have connected!"; 
     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
      if (inputLine.equals("End")) 
       break; 

      // try to echo input stream - no output! 
      out.println(inputLine); 

      if (inputLine.equals("print stuff")) 
       out.println("Client and server have connected!"); 
     } 

    } catch(IOException e) { 
     System.err.println("Exception caught while trying to listen to port!"); 
    } 

} 

}

+0

嘗試打印服務器從客戶端接收到控制檯的每一行。這應該使調試更容易。 – ruediste

+0

@ruediste不知道爲什麼我沒有想到這一點 - 只是試了一下(並修改了我的代碼),沒有任何東西正在打印 – user2893128

回答

2

第一個錯誤是,你的客戶等待輸入從服務器連接後,但服務器不發送任何東西。因此你的用戶輸入循環從不執行。

第二個錯誤是,只要不輸入「打印內容」,服務器就不會對客戶端做任何響應。所以客戶端再次等待來自服務器的輸入,等待來自用戶的輸入。

+0

工作了一個魅力!謝謝! – user2893128