gpt4 book ai didi

java - 如何使用java套接字将文件发送到Web浏览器?

转载 作者:行者123 更新时间:2023-12-01 20:54:46 25 4
gpt4 key购买 nike

出于好奇,我正在尝试用 Java 构建一个 HTTP 服务器。

我知道 HTTP 在底层使用套接字(如果我错了,请纠正我)。因此,最初使用 ServerSocket 类开始编程。

public class Server
{

public static void main(String[] args) throws IOException
{
System.out.println("Listening.....");
ServerSocket ss = new ServerSocket(80);
while(true)
{
Socket s = ss.accept();
Scanner sc = new Scanner(s.getInputStream());
while(sc.hasNextLine())
{
String line = sc.nextLine();
if(line.equals(""))
break;
else
System.out.println(line);
}
System.out.println("-------------------------------");
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println("Hello from Server");
s.close();
ps.close();
sc.close();
}
}
}

(我在实际代码中使用 Thread 来为多个用户提供服务。我刚刚提供了基本代码。)

我从网络浏览器获取所有 header 。但如何发送文件和图像呢?

对于简单的 HTML,我可以读取文件并使用 PrintStream 在网络浏览器上打印它。

但是我如何将 JavaScript、图像等发送到浏览器?

最佳答案

HTTP 有一个协议(protocol),您需要遵循该协议(protocol)。仍在广泛使用的 HTTP 1.1 协议(protocol)规范是 RFC 2616 (尽管它已正式被更新的 RFC 723072317232723372347235 取代)。

my answeranother question ,我展示了直接从 Java Socket 读取入站 HTTP 请求的正确方法。

发送回复时,您可以使用 PrintStreamPrintWriter 发送响应 HTTP header 。但是,正文内容将根据 Content-TypeTransfer-Encoding 响应 header 指定的格式作为原始字节发送。通常,您只需将原始字节直接发送到套接字的 OutputStream,或者至少发送到附加到它的 BufferedOutputStream。如果您要从磁盘发送预先存在的文件,无论其类型如何,您只需为该文件打开一个 InputStream ,然后将其数据直接复制到套接字的 OutputStream 。如果您动态生成数据,那么您可以使用任何合适的中间类将数据发送到套接字的 OutputStreamPrint... 类仅适用于文本数据,不适用于图像等二进制数据。

话虽这么说,Java 有自己的 HttpServerHttpsServer类。您应该考虑使用它们。

关于java - 如何使用java套接字将文件发送到Web浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com