0

Java ソケットを介してファイルを送信し、別のソケットを介してファイルを受信しようとしています。ただし、次のことが起こります。

送信内容:

/* これは単に転送するファイルです */

受け取った:

基本的に、スタックオーバーフローで受信したコンテンツをエスケープすることはできません。基本的には、読み取り不能なバイト (約 32 バイト相当) の束と、送信したメッセージです。

OutputStream os = sock.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(mybytearray);
oos.flush();
oos.close();

クライアントの場合:

BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
FileOutputStream fos = new FileOutputStream("newfile.java");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
sock.close();
4

3 に答える 3

1

コードを見ると役に立ちますが、そこにあるのは基本的なランダム データのように見えます。確認事項:

  1. 受信バッファの種類は?
  2. 何文字送受信しているように見えますか?
  3. 受信側の print ステートメントが正しい場所を指していると確信していますか?
于 2010-05-22T06:07:51.050 に答える
1

なぜ通過するのObjectOutputStreamですか?メソッドOutputStreamを介して直接使用するか、必要に応じて選択します。writeDataOutputStream

Readerまた、バイナリ データの転送にクラスを使用しないでください。の API からReader:

文字ストリームを読み取るための抽象クラス。


完全な「ソケット経由でファイルを送信」の例は、次の場所にあります。

Socket 経由でファイルを転送します

主なサーバー側コード:

  OutputStream os = sock.getOutputStream();
  System.out.println("Sending...");
  os.write(mybytearray,0,mybytearray.length);
  os.flush();
  sock.close();

主なクライアント側コード:

bytesRead = is.read(mybytearray,0,mybytearray.length);
于 2010-05-22T06:11:15.023 に答える
0

これは意味がありません。ObjectOutputStream を使用する場合は、ObjectInputStream を使用して読み取る必要があります。Reader を使用して読み取りたい場合は、Writer を使用して書き込む必要があります。

于 2010-05-22T10:17:09.203 に答える