1

問題の解決: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();}
        }
4

1 に答える 1

4

あなたのコードはおそらくreadLine()呼び出しでブロックされます。またはEOFreadLine()を検出するまでブロックするため、ソケット接続が実際にこれらの終了の1つを送信していない限り、1つを待機します。\n

于 2013-08-18T21:23:10.930 に答える