2011-11-04 68 views
0

我发现这个TCP服务器在线,我想稍微修改它以返回与在客户端键入的消息不同的消息。它不工作,因为我想; else {}的工作“像一个魅力”,但第一个如果没有 - 客户端仍在等待输入。BufferedReader问题 - 没有正确响应

server.java

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); 
String test="hey"; 
String tempus="tster"; 
if(clientSentence.contains(test)==true){ 
System.out.println(tempus); 
outToClient.writeBytes(tempus); 
} 
else{ 
capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
outToClient.writeBytes(capitalizedSentence); 
} 

client.java

public static void main(String argv[]) throws Exception 
{ 
String sentence; 
String modifiedSentence; 
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 
Socket clientSocket = new Socket("localhost", 6789); 
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
sentence = inFromUser.readLine(); 
outToServer.writeBytes(sentence + '\n'); 
modifiedSentence = inFromServer.readLine(); 
System.out.println("FROM SERVER: " + modifiedSentence); 
clientSocket.close(); 
} 

回答

2

读取/写入文件/套接字时常见错误是将文本与bina混合匹配ry并且非常困惑。你已经使用了两者。

您需要使用文本或二进制文件,它似乎要使用文本。例如BufferedReader和PrintWriter。 (注意:PrintWriter在默认情况下消耗基础流中的异常)

0

在你等待线,这是到底\n表示,当你在else做了BufferedReader。如果要使用readLine,则需要发送一行(以新行字符结尾 - \n

如果您不想在输入末尾追加新的行字符,则可以使用BufferedReader#read(char[],int,int)方法

0

BufferedReader.readLine()试图读取整行输入(即它正在寻找换行符'\ n')。在“else”块中的字符串在末尾附加换行符而您的tempus变量没有以换行符终止,因此客户端只是等待。