5

サーバーとクライアントをセットアップしました。これは基本的に基本的なテキストメールシステムです。現在、サーバーとクライアント間でテキストを送信するためにPrintWriterを使用しています。添付ファイルベースのシステムを作成しようとしています。これを行うには、ObjectOutputStreamを使用しています。

private static PrintWriter output;
private static ObjectOutputStream outStream;

public ClientHandler(Socket socket) throws IOException
{
    client = socket;
    outStream = new ObjectOutputStream(client.getOutputStream());
    input = new Scanner(client.getInputStream());
    output = new PrintWriter(client.getOutputStream(), true);
}

現在、出力プリントライターを介してテキストを送信しようとすると、送信されるテキストの先頭に余分な文字が追加され、プログラムがプリントライターを介してクライアントに渡されるキーワードを識別できないという問題があります。outStreamオブジェクトの作成をコメントアウトすると、問題は停止します。

この紛争の問題を解決するためのアドバイスを誰かに教えてもらえますか?

4

3 に答える 3

4

この余分なテキストは、オブジェクト出力ストリームからのものです。

ObjectOutputStreamとPrintStreamを同じ出力ストリームにアタッチすることは、基本的には機能しません。どちらか一方を使用するための解決策を考え出す必要があります。PrintStreamだけを使用するには、オブジェクトをJSONまたはXMLに変換することを検討してください。一方、ObjectOutputStreamを使用して、文字列をObjectOutputStreamに書き込むこともできます。

于 2012-04-11T20:36:04.737 に答える
0

ObjectOutputStreamObjectOutputStreamそのチャネルでのみ使用する必要があります。PrintWriter本当に必要な場合は、別のソケットで使用してください。

于 2012-04-11T20:35:42.530 に答える
0

ClientHandlerを拡張し、コンストラクターを上書きして、ファイル転送を処理するためのコードを含めます。2つのポートを開いてください。1つはテキスト用で、もう1つはファイル転送用です。

private static PrintWriter output;

public ClientHandler(Socket socket) throws IOException
{
    client = socket;
    input = new Scanner(client.getInputStream());
    output = new PrintWriter(client.getOutputStream(), true);
}

private static ObjectOutputStream outStream;

public ClientFileHandler(Socket socket) extends ClientHandler throws IOException
{
    client = socket;
    outStream = new ObjectOutputStream(client.getOutputStream());

}
于 2012-04-11T20:46:22.553 に答える