我目前正在创建一个返回静态页面的小型HTTP服务器<p>Hello!</p>
…我尝试使用Java套接字:
public static void main(String[] args) throws Exception {
// création de la socket
int port = 1989;
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("Serveur lancé sur le port : " + port);
// repeatedly wait for connections, and process
while (true) {
// on reste bloqué sur l'attente d'une demande client
Socket clientSocket = serverSocket.accept();
System.err.println("Nouveau client connecté");
// on ouvre un flux de converation
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream())
);
PrintWriter out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream())),
true);
// chaque fois qu'une donnée est lue sur le réseau on la renvoi sur le flux d'écriture.
// la donnée lue est donc retournée exactement au même client.
String s;
while ((s = in.readLine()) != null) {
System.out.println(s);
out.write("HTTP/1.0 200 OK\r\n");
out.write("Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n");
out.write("Server: Apache/0.8.4\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-Length: 59\r\n");
out.write("Expires: Sat, 01 Jan 2000 00:59:59 GMT\r\n");
out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n");
out.write("\r\n");
out.write("<TITLE>Exemple</TITLE>");
out.write("<P>Ceci est une page d'exemple.</P>");
}
// on ferme les flux.
System.err.println("Connexion avec le client terminée");
out.close();
in.close();
clientSocket.close();
}
}
该代码不包含任何错误,我从浏览器得到了如下响应:
GET / HTTP/1.1
Host: localhost:1989
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5 Comodo_Dragon/19.0.3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
但是我的问题是浏览器没有页面?有什么帮助吗?
PS:我已经读过这篇文章:http
:
//en.wikipedia.org/wiki/Hypertext_Transfer_Protocol,(对不起法语,…)
除了\r\n
每个请求标头行之后,您还必须在标头之后发送一个空行。例:
out.write("HTTP/1.0 200 OK\r\n");
// Header...
out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n");
out.write("\r\n"); // The content starts afters this empty line
out.write("<TITLE>Hello!</TITLE>");
// Content...
我更正了您的代码,使其可以正常工作(但仍然不完美,您应该在单独的线程中处理每个请求,例如使用java.util.concurrent.ThreadPoolExecutor
):
public static void main(String[] args) throws Exception {
// création de la socket
int port = 1989;
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("Serveur lancé sur le port : " + port);
// repeatedly wait for connections, and process
while (true) {
// on reste bloqué sur l'attente d'une demande client
Socket clientSocket = serverSocket.accept();
System.err.println("Nouveau client connecté");
// on ouvre un flux de converation
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
// chaque fois qu'une donnée est lue sur le réseau on la renvoi sur
// le flux d'écriture.
// la donnée lue est donc retournée exactement au même client.
String s;
while ((s = in.readLine()) != null) {
System.out.println(s);
if (s.isEmpty()) {
break;
}
}
out.write("HTTP/1.0 200 OK\r\n");
out.write("Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n");
out.write("Server: Apache/0.8.4\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-Length: 59\r\n");
out.write("Expires: Sat, 01 Jan 2000 00:59:59 GMT\r\n");
out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n");
out.write("\r\n");
out.write("<TITLE>Exemple</TITLE>");
out.write("<P>Ceci est une page d'exemple.</P>");
// on ferme les flux.
System.err.println("Connexion avec le client terminée");
out.close();
in.close();
clientSocket.close();
}
}
本文向大家介绍超简单的Python HTTP服务,包括了超简单的Python HTTP服务的使用技巧和注意事项,需要的朋友参考一下 超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Python 可能帮助你。使用Python可以完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出
本文向大家介绍C++实现简单的HTTP服务器,包括了C++实现简单的HTTP服务器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现HTTP服务器的相关代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
问题内容: 有没有一种方法可以仅使用Java SE API在Java中创建一个非常基本的HTTP服务器(仅支持GET / POST),而无需编写代码来手动解析HTTP请求和手动格式化HTTP响应?Java SE API将HTTP客户端功能很好地封装在HttpURLConnection中,但是HTTP服务器功能是否类似? 需要明确指出的是,我在网上看到的许多ServerSocket示例存在的问题是它
问题内容: 我正在尝试编写一个简单的Java http客户端,该客户端仅打印出服务器响应的一行。我的问题是服务器没有响应。这是我所拥有的,正在编译并且没有明显错误地运行,只是在键入主机名(例如“ www.google.com”)后挂起: 有什么建议?请注意,这假设存在一个“ index.html”-即使为true,它仍会挂起。 问题答案: 我认为我可以通过对代码进行少量更改来重现该问题,因此现在它
问题内容: 有谁知道将Java方法发布为Web服务的非常简单的方法?我真的不想要使用Tomcat或Jetty或任何其他容器框架的开销。 方案:我想从本地LAN上的其他计算机访问服务类型应用程序中的一组Java方法。 问题答案: 好吧,Tomcat或Jetty对于将某些方法发布为Web服务可能是过大的。但是另一方面,它并不太复杂,他们可以完成工作,那么为什么不呢? 不久前我遇到了类似的问题,并将To
socket 的中文名字叫做套接字,这种东西就是对 TCP/IP 的 封装。现实中的网络实际上只有四层而已,从上至下分别是应用层、传输层、网络层、数据链路层。最常用的 http 协议则是属于应用层的协议,而 socket,可以简单粗暴的理解为是传输层的一种东西。如果还是很难理解,那再粗暴地点儿 tcp://218.221.11.23:9999,看到没?这就是一个 tcp socket。 socke