0

オブジェクトを使用するサーバーがオブジェクトで受信するクライアントに送信する単純なクライアントサーバーです。BufferedWriterBufferedReader

サーバークライアントに対してOutputStreamandを使用するとPrintWriter、うまく機能します。InputStreamScanner

Stringに対してintnullを送信している場合、 Bufferedの方法でクライアントが-1 を読み取るということが起こります。

私の英語が理解できることを願っています。;P

それがコードです:

サーバー:

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

2 に答える 2

3

output.write(3); の後に次のコードを追加してみてください。

output.flush();

BufferedOutputStream は、バッファがいっぱいになったときにのみデータを送信するように構築されています (デフォルトは 1024 バイトだと思います)。したがって、データを強制的に送信するには、ストリームをフラッシュする必要があります。

于 2010-09-29T22:00:22.760 に答える
1

クライアント部分でデータを受信するには、データをフラッシュする必要があります。

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

OutputStream (またはライター) がある場合は、データをフラッシュする必要があります。これにより、送信したいものが送信されたことを 100% 確信できます。

ほとんどの (すべてではないにしても) OutputStream サブクラスは「ミニ バッファー」を使用します。これは、いっぱいになったとき、または手動でflush(). あなたの場合、BufferedWriter.

もう 1 つは、ストリーム/ライターを使用するときは、終了後にそれらを閉じる必要があります。close()(ほとんどの場合) 主に行うことの 1 つは、「ミニ バッファー」に残っている最後のデータをフラッシュすることです。


資力 :

于 2010-09-29T22:02:31.923 に答える