ソケットを介してサーバからクライアントに画像ファイルを送信しようとしています。 ソケットは、サーバーからクライアントへの一部の文字列を送信するために以前使用されていました(バッファされた入出力ストリームを使用して)。ソケット:JPEGファイルの早すぎる部分
"JPEGファイルの時期尚早終了"エラーが発生したため、画像ファイルを正しく受信できません。
サーバーは最初にクライアントにファイルサイズを送信し、クライアントはそのサイズのbyte []を作成し、ファイルの受信を開始します。ここで
は、コードは次のとおりです。
サーバー:
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//Send file size
dos.writeInt((int) file.length());
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
byte[] fileBytes = new byte[bis.available()];
bis.read(fileBytes);
bis.close();
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
bos.write(fileBytes);
bos.flush();
はクライアント:さらに興味深いことに
DataInputStream dis = new DataInputStream(socket.getInputStream());
//Receive file size
int size = dis.readInt();
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
byte[] fileBytes = new byte[size];
bis.read(fileBytes, 0, fileBytes.length);
、私は、ファイルサイズを送信するとの間で約2秒間サーバ睡眠を聞かせている場合バイト[]を書き込むと、画像は正しく受信されます。サーバーとクライアントの間に何らかの競合状態が存在するのだろうか。
読み取り/書き込みプログラムとストリームを使用することはできません。どちらか一方のタイプを使用するか、アプリケーションが混乱する可能性があります。 –
サーバに 'BufferedReader'があるのはなぜですか?何か戻ってくるの? – powerMicha