2014-01-21 77 views
-1

我在Java中製作了一個程序,允許服務器管理員監視客戶端進程。當我將數據發送到服務器時,這一切都可以。但是,當我嘗試發回數據時,它只是沒有收到它。TCP客戶端發送但沒有收到,服務器收到但沒有發送

import java.io.*; 
import java.net.*; 
class TCPServer { 
public static void main(String argv[]) throws Exception { 
    String clientSentence; 
    String capitalizedSentence; 
    ServerSocket welcomeSocket = new ServerSocket(6789); 
    while (true) { 
     Socket connectionSocket = welcomeSocket.accept(); 
     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(); 
     outToClient.writeBytes(capitalizedSentence); 
    } 
} 

}

我發現了錯誤,我是不是發送消息之後的「\ n」,造成堆積和那些永遠不會發送。

import java.io.*; 
import java.net.*; 
class TCPServer { 
public static void main(String argv[]) throws Exception { 
    String clientSentence; 
    String capitalizedSentence; 
    ServerSocket welcomeSocket = new ServerSocket(6789); 
    while (true) { 
     Socket connectionSocket = welcomeSocket.accept(); 
     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); 
    } 
} 

}

+0

我在看,但我只是看不到它... –

+0

哦對不起忘記鏈接lol –

+0

現在它在這裏。我很抱歉 –

回答

1

您的服務器從來沒有真正發送完一條線。它發送「killpr」,然後永遠離開套接字 - 不發送換行符或關閉套接字。

在客戶端上,readLine不返回,因爲它正在等待該行的其餘部分。

+0

immibis我有另一個問題。我將如何去發送來自另一個類/函數的消息? –

相關問題