繁体   English   中英

如何在Java中在PrintWriter之前使用BufferedReader

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM