Java 如果在里面

Java 如果在里面,java,if-statement,while-loop,inputstream,outputstream,Java,If Statement,While Loop,Inputstream,Outputstream,问题解决:我忘记在客户端刷新PrintWriter 我对这个代码有问题。输出是1,2,3,4,5,5.5,但它不会达到6或5.75,我不知道出了什么问题。它是一个使用套接字的客户机/服务器应用程序 客户: System.out.println("1"); socket = new Socket("localhost", 1035); System.out.println("2"); br = new BufferedReader(new InputStreamReader(socket.getI

问题解决:我忘记在客户端刷新PrintWriter

我对这个代码有问题。输出是1,2,3,4,5,5.5,但它不会达到6或5.75,我不知道出了什么问题。它是一个使用套接字的客户机/服务器应用程序

客户:

System.out.println("1");
socket = new Socket("localhost", 1035);
System.out.println("2");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("3");
pw = new PrintWriter(socket.getOutputStream());
System.out.println("4");

pw.println("hello");
String message = null;
System.out.println("5");
boolean done = false;

while(!done) {
    System.out.println("5.5");
    if((message = br.readLine()) != null) {
        System.out.println("6");
        cardname.setText(message);
        done = true;
    }
    System.out.println("5.75");
}
System.out.println("7");
服务器:

        @Override
        public void run() {
            String message = null;
            boolean done = false;
            try {
                System.out.println("5.25");
                while(!done) {
                    System.out.println("5.5");
                    if((message = br.readLine()) != null) {
                        System.out.println("6");
                        String resp = handleRequest(message, sock.getInetAddress());
                        pw.println(resp);
                        pw.flush();
                        System.out.println("7");
                    }
                    System.out.println("5.75");
                }
                connDec();
            } catch(Exception ex) {ex.printStackTrace();}
        }

您的代码可能会阻塞readLine调用。readLine会一直阻塞,直到检测到\n或EOF为止,因此除非您的套接字连接实际发送了其中一个终止,否则它将等待一个终止。

您的代码可能会阻塞readLine调用。readLine会一直阻塞,直到检测到\n或EOF为止,因此,除非您的套接字连接实际发送了其中一个终止,否则它将等待一个终止。

它可能在br.readLine上被阻塞。确保服务器上的数据可用。它可能在br.readLine上被阻止。确保服务器上的数据可用,但如果未检测到任何内容,则应返回null并写入5.75,然后重试。@KevinFurmanski不会打印5.75,因为它从未到达那里。您的代码在readLine调用时被卡住。但如果它没有检测到任何内容,则应返回null并写入5.75,然后重试。@KevinFurmanski不会打印5.75,因为它从未到达那里。您的代码在readLine调用时被卡住。