![](/img/trans.png)
[英]How do you set a timeout on BufferedReader and PrintWriter in Java 1.4?
[英]How to use BufferedReader before PrintWriter in Java
我正在使用Java开发小型服务器/客户端应用程序(基于控制台)。 该应用程序的目的是从客户端向服务器发送号码,并在服务器中添加(+1)并返回给客户端。 客户端打印行并将增加的数量发送回服务器,直到达到10。
这两个类之间的连通性正常运行,但是当我在服务器类中将BufferedReader
放在PrintWriter
之前时,则该应用程序将无法工作,也不会引发任何错误。
客户代码:
int count = 1;
PrintWriter out = null;
BufferedReader in = null;
Socket socket = null;
try {
socket = new Socket("localhost",3700);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
while(in.read() != 10){
out.println(count);
out.flush();
System.out.print(in.read());
};
out.close();
in.close();
socket.close();
服务器代码:
ServerSocket serverSocket = null;
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
int count = 1;
try {
serverSocket = new ServerSocket(3700);
} catch (IOException e) {
e.printStackTrace();
}
try {
socket = serverSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
out = new PrintWriter(socket.getOutputStream());
out.println(count);
out.flush();
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(in.read() != 10){
count = in.read();
count++;
};
in.close();
out.close();
serverSocket.close();
socket.close();
while(in.read() != 10){
count = in.read();
count++;
};
您正在读取字符并将其扔掉,而忽略了流的结尾。 它应该是:
int ch;
while((ch = in.read()) !- -1 && ch != 10){
count = ch;
count++;
};
对于服务器端也是如此。 -1测试是流条件的结束,在对等方关闭连接时发生。
但更可能您应该使用readLine()
和Integer.parseInt()
:
String line;
while ((line = in.readLine()) != null)
{
int value = Integer.parseInt(line);
// etc.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.