Frage

Es ist ein einfacher Client-Server, auf den Server ein BufferedWriter-Objekt an die senden würde Client in dem Objekt BufferedReader erhalten.

Wenn ich OutputStream und PrintWriter für die Server und InputStream und Scanner für die Client es funktioniert gut.

Was passiert, ist, dass der Kunde in Buffered Art und Weise liest -1, wenn ich sende ein int und null für String .

Ich hoffe, mein Englisch Sinn macht. ; P

Das ist der Code:

Server :

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();
        }
    }
}

Client :

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);
        }
    }
}
War es hilfreich?

Lösung

Sie müssen bündig Daten sie in dem Client-Teil zu erhalten.

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

Wenn Sie eine Output (oder einen Writer) müssen Sie Ihre Daten spülen, auf diese Weise Sie sind 100% sicher, dass das, was Sie sein senden wollte abgeschickt wurde.

Die meisten (wenn nicht alle) die Outputunterklassen verwenden, um einen „Mini-Puffer“, die nur gespült wird, wenn er voll ist oder manuell flush() nennen. In Ihrem Fall ist es sogar noch eklatanter, weil Sie eine BufferedWriter verwenden.

Eine andere Sache, wenn Sie streams / Autoren verwenden, sollten Sie wirklich, sie schließen, nachdem Sie fertig sind, einer der Hauptsache close() Sie (die meiste Zeit) wird die letzte Daten Spülung in der „Mini-Puffer“ zu bleiben.


Ressourcen:

Andere Tipps

versuchen, den folgenden Code nach output.write setzen (3);

output.flush();

Die BufferedOutputStream, um nur die Daten zu senden gebaut werden, wenn der Puffer voll ist (ich glaube, dass die Standard-1024 Bytes). Also, um die Daten zu erzwingen gesendet werden Sie den Strom spülen müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top