2
我正在创建一个简单的HTTP服务器(使用maven)。当用户输入http://127.0.0.1:8181/pic
时,应显示图像。为什么在通过套接字写入发送时客户端浏览器中的图像不显示?
当我跑班,输入http://127.0.0.1:8181/pic
,图像不显示;我只是得到垃圾字符的线条!
代码:
public static void main(String[] args) throws Exception {
int port = 8181;
ServerSocket server = new ServerSocket(port);
System.out.println("Listening for a connection on port " + port + " ...");
while (true) {
Socket client = server.accept();
System.out.println("A client connected: " + client.getInetAddress());
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
String line = in.readLine();
while (!line.isEmpty()) {
System.out.println(line);
String[] firstLine = line.split("\\s+"); // line is like: GET /pic HTTP/1.1
String method = firstLine[0];
if (method.equalsIgnoreCase("GET")) {
String resourceNme = firstLine[1];
if (resourceNme.equals("/pic")) {
out.write("Server: Apache/0.8.4\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-type: image/gif");
out.write("\r\n");
out.write("<TITLE>Example Image</TITLE>");
//find file in system and send as response
URL url = SimpleHTTPServer.class.getResource("/office.jpg");
File file = new File(url.toURI());
if (file.exists()) {
System.out.println("file exists");
ImageInputStream imageInputStream = ImageIO.createImageInputStream(file);
long size = imageInputStream.length();
BufferedImage bufferedImage = ImageIO.read(file);
boolean success = ImageIO.write(bufferedImage, "jpeg", client.getOutputStream());
System.out.println("Success: " + success); // is true
} else {
System.out.println("don't exists");
}
out.close();
in.close();
client.close();
break;
}
}
}
}
}
示例输出接收到的:
SHùiƃ@8¤ÇîÔéHŽ”c;… äúÑ“ëIŠ[email protected]ËQ“ï@¥Å��œ÷¥Éõ¢Š�9õ¥Éõ¤¥ 'Ö€ÄzÑF(wzFb;ÑPÈø¤d”Œòj³HÄõ4®ù¨è»›ûÆÍýãIE�.æþñ£sxÒb—�noï7·÷£�ííêi|Æþñ¦âœ�Û?xÒïoïLRâ€
íýãNÞßÞ4ÜRâ€{xѽ¿¼i1F)�»›ûÆÍýãE�noSFæõ4bŒPîoïPíýãH ooï77÷ ¸ ÙûÆ—sxÓ@æ—�»›ûÆ—-ëMÅ--ýãFæõ4QŠ�]ÍêiK6:ÒRã4Ä"ï,�'šé4]5‹od•Ÿ§é1G*H<×saf©œ`ŽÕ¤DÉ µÅXÆÓš~=iÈÅjf0¯9 ¨àŠ[email protected] 2äç¸ÈÎ)øãÆ)€ÜdRàÆ)zR‚E �7-�”v P�(�r)hÆ
0œbŒu¥ÆiHç4�˜”`n¥Åw Ú3JGJZ"€G|R°Î)våhÆåÅ�>ZR2™ |Ê>”ª3=)0
£f=©/ð§'+BŒ(c�¸¸Å‌
更新的代码与HTML相关响应代码除去
if (resourceNme.equals("/pic")) {
out.write("Server: Apache/0.8.4\r\n");
out.write("Content-type: image/jpeg\r\n");
URL url = SimpleHTTPServer.class.getResource("/office.jpg");
File file = new File(url.toURI());
if (file.exists()) {
System.out.println("file exists");
ImageInputStream imageInputStream = ImageIO.createImageInputStream(file);
long size = imageInputStream.length();
out.write("Content-Length: " + size + "\r\n");
out.write("\r\n");
BufferedImage bufferedImage = ImageIO.read(file);
boolean success = ImageIO.write(bufferedImage, "jpeg", client.getOutputStream());
System.out.println("Success: " + success); //true
out.close();
in.close();
client.close();
break;
} else {
System.out.println("don't exists");
out.close();
in.close();
client.close();
break;
}
}
尝试更改您的页面编码。它可能会显示一条错误消息。 –
@DanielCheung它在'unicode'中,改成什么? –
其他任何事情,并尝试看看你是否可以理解任何不同的编码,以检查这个**是否真的是垃圾文本。 –