サーバー側とクライアント側をJavaで書こうとしています。したがって、クライアント側は GET / HTTP/1.0 のようなリクエストを送信し、HTTP/1.0 200 OK のようなサーバー側の応答 (ファイルが存在する場合) を送信し、ヘッダーの content-type とコンテンツの長さを入れて、FileInputStream からのストリームを BufferedOuputStream に書き込みます。サーバ側:
String endLine = "\r\n";
File f = new File(fileName);
FileInputStream fstream;
fstream = new FileInputStream(f);
response = "HTTP/1.0 200 OK" + endLine;
header = "Content-type: "+ contentType + endLine + "Content-length: " + f.length() + endLine + endLine;
bout.write(response.getBytes());
bout.write(header.getBytes());
int lol;
while((lol = fstream.read(buffer)) != -1) {
bout.write(buffer,0,lol);
}
System.out.println("Message sent");
bout.flush();
socket.close();
クライアント側:
byte[] res = new byte[bufferSize];
int got;
int i=0;
int temp = 0;
int j = 0;
while((got = bis.read(res))!=-1){
for(j=0;j<res.length;j++){
//dividing from header
if(res[j]=='\n'&&res[j-1]=='\r'&&res[j-2]=='\n'&&res[j-3]=='\r'){
temp = j+1;
}
}
fout.write(res,temp,got-temp);
i++;
}
したがって、.html ファイルでは問題なく動作しますが、画像では...
解決策を見つけました。エラーはオフセットにありました:
fout.write(res,temp,got-temp);
この行は、反復ごとにオフセットを追加します。私は最初にだけ必要です:
if(i==0){
fout.write(res,temp,got-temp);
}else{
fout.write(res,0,got);
}