BufferedReader问题 - 没有正确响应

时间:2011-11-04 15:11:28

标签: java

我发现这个TCP服务器在线,我想稍微修改它以返回与客户端中输入的不同的消息。它不能按我的意愿工作; else {}的工作原理“就像一个魅力”,但第一个如果没有 - 客户端仍在等待输入。

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();
}

3 个答案:

答案 0 :(得分:2)

读/写文件/套接字时常见的错误是将文本与二进制文件混合和匹配,并且会让人感到非常困惑。你已经使用了两者。

您需要使用文本或二进制文件,看起来您要使用文本。例如BufferedReader和PrintWriter。 (注意:PrintWriter会静​​默消耗底层流中的异常)

答案 1 :(得分:0)

BufferedReader中,您等待最后由\n指示的一行,就像您在else中所做的那样。如果要使用readLine,则需要发送一行(以新行字符结尾 - \n

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

答案 2 :(得分:0)

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