Почему мой клиент не читает правильно, что вывод выпускается на сервере?

StackOverflow https://stackoverflow.com/questions/3826099

Вопрос

Это простой клиент-сервер, где с помощью BufferedWriter Объект отправит на BufferedReader.

Когда я использую OutputStream и PrintWriter для и InputStream и Scanner для Клиент это работает хорошо.

Что происходит, это то, что клиент в Буферизованный путь читает -1, если я посылаю int. и нулевой за Нить.

Я надеюсь, что мой английский имеет смысл. ;П

Это код:

Сервер:

import java.io.*;
import java.net.*;

public class Server {

    public static void main(String[] args) throws IOException {

        ServerSocket server = new ServerSocket(8189);
        Socket incoming;

        incoming = server.accept();
        try {
            // OutputStream output = incoming.getOutputStream();
            // PrintWriter outStream = new PrintWriter(output, true /*autoFlush*/);
            // outStream.println("ENTER");
            BufferedWriter output = new BufferedWriter(new           
                                    OutputStreamWriter(incoming.getOutputStream()));
            output.write(3);
            System.out.println("\nSent");

        } finally {
            incoming.close();
        }
    }
}

Клиент:

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws UnknownHostException, IOException {

        //Client theClient= new Client();
        Socket RTSPSocket;
        int ServerPort = 8189;
        //server name address
        String ServerHost = "localhost";

        //get Server IP Address
        InetAddress ServerIPAddress = InetAddress.getByName(ServerHost);

        RTSPSocket = new Socket(ServerIPAddress, ServerPort);

        try {
            /*
            InputStream input = theClient.RTSPSocket.getInputStream();
            Scanner in = new Scanner(input);
            String line = in.nextLine();
            System.out.println(line);
            */

            BufferedReader input = new BufferedReader(new  
                                   InputStreamReader(RTSPSocket.getInputStream()));

            //String line = input.readLine();
            //System.out.println("\nRicevuto: " + line);
            System.out.println(input.read());
        } catch (Exception e) {
            System.err.println("Error: " + e);
        }
    }
}
Это было полезно?

Решение

Вы должны промывать данные, чтобы получить их в клиентской части.

        output.write(3);
        output.flush();
        System.out.println("\nSent");

Большинство (если не все) подклассы вывода используют «мини-буфер», который промывается только тогда, когда он заполнен или вы вручную звоните flush(). Отказ В вашем случае, это еще более вописно, потому что вы используете BufferedWriter.

Еще одна вещь, когда вы используете потоки / писатели, вы действительно должны закрыть их после того, как вы закончите, одно из главных close() Делать (большую часть времени) - промывка последних данных, оставшихся в «мини-буфере».


Ресурсы :

Другие советы

Попробуйте поместить следующий код после вывода .WRITE (3);

output.flush();

PUFFEREDOUTPUTSTREAM создан только для отправки данных только при заполнении буфера (я считаю, что по умолчанию 1024 байты). Таким образом, заставить данные для отправки вам нужно промыть поток.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top