这段代码加载我的html,但它不会在html中加载我的jpgs,当我运行代码时,似乎它正在工作,所有字节都是为每个图像发送的,但它们没有显示在我的浏览器中。我应该使用DataOutputStream发送字节,但也许这就是问题?我真的迷失了,并且对网络编程很陌生。
public void run(){
System.out.println("CLIENT THREAD STARTING");
String req = "";
if(clientIn.hasNextLine()){
req = clientIn.nextLine();
System.out.println("Header: " + request);
}
PrintWriter toClient = null;
try {
toClient = new PrintWriter(sock.getOutputStream());
} catch (IOException e2) {
e2.printStackTrace();
}
//only sends files if client requests them
if(request.contains("GET")){
req = req.substring(request.indexOf("/") + 1);
String name = req.substring(0, req.indexOf(" "));
String type = "";
if(name.contains(".jpg")){
type = "text/html";
}
else if(name.contains(".html")){
type = "image/jpeg";
}
File theFile = new File(fileName);
FileInputStream fileIn = null;
try{
fileIn = new FileInputStream(fileName);
}catch(FileNotFoundException e){
toClientText.println("404");
toClientText.flush();
System.exit(-1);
}
System.out.println("File name " + name);
toClientText.println("HTTP/1.1 200 OK");
toClientText.println("Connection: closed");
toClientText.println("Content-Length: " + theFile.length());
toClientText.println("Content-Type: " + type);
toClientText.println("\n");
toClientText.flush();
DataOutputStream dataStream = null;
try {
dataStream = new DataOutputStream(sock.getOutputStream());
} catch (IOException e1) {
e1.printStackTrace();
}
byte[] send = new byte[1024] ;
try {
while ((fin.read(send)) != -1 ) {
toClientData.write(send);
toClientData.flush();
}
toClientData.close();
fin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
else{
toClientText.println("Bad Request 400");
toClientText.flush();
}
}
答案 0 :(得分:2)
toClientText.println("Content-Type: " + fileType);
toClientText.println("\n");
这将在标题和文件数据之间创建3个换行符,因此您的浏览器会认为第三个换行符是图像的一部分,这会破坏图像。
此外,即使所有浏览器都能处理\n
换行符,请注意标准要求\r\n
换行符,而不是\n
。
这应该有效:
toClientText.println("Content-Type: " + fileType);
toClientText.println();