Недавно я учился писать простой HTTP-сервер, потому что функция очень проста, пока пользовательский доступ будет реагировать на изображение. Итак, я решил не читать данные запроса пользователя (потому что они мне не нужны), но когда я использовал свой браузер для доступа к localhost: 10000, возникла проблема - изображение не могло отображаться полностью, и я не мог Не скачиваю. Однако, когда я прочитаю запрос пользователя, он будет работать нормально. Если я прочитаю только часть данных запроса, программа не будет работать должным образом.
Вот мой упрощенный код.
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
import java.nio.file.Files;
public class Server {
public static void main(String[] args) throws IOException {
try (ServerSocket server = new ServerSocket(10000)) {
while (true) {
Socket client = server.accept();
System.out.println("user connecting。。。");
OutputStream out = new BufferedOutputStream(client.getOutputStream());
// InputStream in = new BufferedInputStream(client.getInputStream());
// StringBuilder request = new StringBuilder(80);
// while (true) {
// int c = in.read();
// if (c == '\r' || c == '\n' || c == -1) break;
// request.append((char)c);
// }
File file = new File("D:/DragonFile/target/attitude.jpg");
long length = file.length();
byte[] data = Files.readAllBytes(file.toPath());
String header = "HTTP/1.0 200 OK\r\n"
+ "Server: crazy\r\n"
+ "ContentType-length: " + length + "\r\n"
+ "Content-Type: " + "image/jpg" + "; charset=" + "UTF-8" + "\r\n\r\n";
out.write(header.getBytes(Charset.forName("UTF-8"))); //response header
out.write(data); //response body
out.flush(); // flush the stream
client.close();
}
}
}
}
Запустите этот код и используйте браузер для доступа к localhost: 10000, и изображение будет отображаться, но в этой программе есть ошибка.
Когда я отменяю часть комментария выше, код может работать нормально, и это нормально для доступ к картинкам.
Вот картинка нормального доступа.
Это мой первый вопрос, помогите, пожалуйста, и скажите почему. Мне это интересно.