我的ServerSocket
写出以下几行:
OutputStreamWriter outstream = new OutputStreamWriter(clientSocket.getOutputStream());
BufferedWriter out = new BufferedWriter(outstream);
out.write("Hello");
out.newLine();
out.write("People");
out.flush();
我的客户端就是这样读的:
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
while(true){
line = in.readLine();
if(line == null){
ClientDialog.gui.log.append("NULL LINE\r\n");
} else{
ClientDialog.gui.log.append(line+"\r\n");
}
if(in.readLine() == "SHUTDOWN"){
break;
}
}
正如您所看到的,我在套接字上写了“Hello”,一个新行,然后是“People”,但是当我运行我的客户端时,它只会重复打印“Hello”和null。我看不出有什么问题?
问题已解决:
在我将“人物”写入套接字后,我不得不添加out.newLine()
,而我必须line == "SHUTDOWN"
而不是in.readLine() == "SHUTDOWN"
因为in.readLine()
正在消费“人”
还建议在equals()
课程中使用String
方法,而不是==
。
谢谢!
这是为了未来的观众。
答案 0 :(得分:9)
每个循环调用readLine两次。
if(in.readLine() == "SHUTDOWN"){
break;
}
上面的代码会消耗您的“人物”行
将更改修改为
if("SHUTDOWN".equals(line){
break;
}
此外,您应该在发送“人物”后发送换行符
答案 1 :(得分:3)
此
if(in.readLine() == "SHUTDOWN")
{
break;
}
应该是这样的:
if(line == "SHUTDOWN")
{
break;
}
您正在调用readLine()
两次,因此消耗了一行
此外,在比较String类型时,您应该在String类中使用equals()
方法:
if(line != null && line.equals("SHUTDOWN"))
{
break;
}
答案 2 :(得分:3)
我很确定你的in.readLine() == "SHUTDOWN"
正在消费流中的“人”。进一步==
也不起作用。
答案 3 :(得分:1)
发送人员后,您需要发送另一个换行符。您对readLine的调用正在等待它发出信号以处理更多数据。
尝试
out.write("Hello");
out.newLine();
out.write("People")
out.newLine();