2017-02-12 82 views
-2

我創建了我的第一個測試應用程序來實現套接字服務器。我有一些問題讓客戶端接收數據,但服務器獲取數據就好了。這裏是服務器:Java Socket客戶端沒有收到數據

ServerSocket socket = new ServerSocket(11111); 
       System.out.println("CREATING SERVER..."); 
       while (true) { 
        Socket SERVER_WORK = socket.accept(); 
        BufferedReader clientIN = new BufferedReader(new InputStreamReader(SERVER_WORK.getInputStream())); 
        PrintWriter outSend = new PrintWriter(SERVER_WORK.getOutputStream()); 
        String ClientSTR = clientIN.readLine(); 
        System.out.println("Client 1: " + ClientSTR); 
        String toClient = "Hello"; 
        outSend.write(toClient + '\n'); 
       } 

這裏是客戶端:

System.out.println("CONNECTING TO SERVER..."); 
       while (true) { 
        Socket clientSocket = new Socket(server, 11111); 
        BufferedReader fromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
        DataOutputStream toServere = new DataOutputStream(clientSocket.getOutputStream()); 
        Scanner in = new Scanner(System.in); 
        toServere.write(in.nextLine().getBytes()); 
        if (fromServer.ready()) 
        System.out.println(fromServer.readLine()); 
        clientSocket.close(); 
       } 

一切工作正常,除了客戶端接收數據。

+1

嘗試在服務器上使用'outSend.flush()'以確保字節實際發送而不是保存在緩衝區中。 http://stackoverflow.com/questions/2340106/what-is-the-purpose-of-flush-in-java-streams –

+1

你的「服務器」是一個客戶端,而你的「客戶端」是一個服務器。第一段代碼永遠不會關閉套接字。 'ready()'調用是毫無意義的,應該刪除。您正在讀取第一段代碼中的行,但不會在第二段代碼中發送行。 – EJP

回答

-1

我找到了解決方案:我需要在DataOutputStream/PrintWriter的行末尾有一個'\ n',以便BufferedReader正常工作。

+0

18小時前我告訴過你這個問題。 – EJP

相關問題