我有一个java服务器套接字(或http服务器,每个人都叫它不同的名字),我正在尝试显示一个图像。现在,我只是使用一个图像托管网站,然后从那里链接它,但我想知道,如果我可以通过我的连接发送图像?这是我的代码,它只有一个类,
import java.io.File;
import java.io.IOEXception;
import java.new.ServerSocket;
import java.net.Socket;
import java.util.Scanner
public class main {
public static void main(String argumentsCanBeNamedAnything[]) throws
IOException {
ServerSocket server = new ServerSocket(80);
System.out.println("Listening");
while(true) {
try(Socket socket = server.accept()) {
String daCode = "";
File file = new File("index.html");
Scanner sc = new Scanner(file);
while(sc.hasNextLine()) {
String i = sc.nextLine();
daCode+=i;
}
String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + daCode;
socket.getOutputStream().write(httpResponse.getBytes("UTF-8"));
}
}
}
}
我希望能够有一个图像在同一目录作为index.html,然后能够发送该图像,这样我就不必使用一个图像托管网站。任何想法都是好主意:)
发布于 2018-07-27 10:09:40
您可以使用同一段代码处理所有文件。一旦有了从文件读取的输入流,就应该将所有字节复制到套接字输出流。所以首先你应该得到一个输入流,如下所示:
String filename = ...
File file = new File(filename);
InputStream input = new FileInputStream(file);
然后你应该会得到一个连接到套接字的输出流:
OutputStream output = socket.getOutputStream();
现在您可以像这样编写HTTP响应:
write(output, "HTTP/1.1 200 OK");
write(output, "\n\n");
copyAllBytes(input, output);
write方法将如下所示:
void write(OutputStream output, String s) throws IOException {
output.write(s.getBytes());
}
copyAllBytes将如下所示:
void copyAllBytes(InputStream input, OutputStream output) throws IOException {
byte[] buf = new byte[8192];
int n;
while ((n = input.read(buf)) != -1) {
output.write(buf, 0, n);
}
}
理想情况下,您还应该发送一个"Content-Type“标头,指明文档的性质和格式。头部也应该写入套接字输出,下面是一个简单的例子:
write(output, "HTTP/1.1 200 OK");
write(output, "\n");
write(output, "Content-Type: text/html; charset=utf-8");
write(output, "\n\n");
copyAllBytes(input, output);
https://stackoverflow.com/questions/51547522
复制相似问题