📄 简单的用 java socket 编写的 http 服务器应用,帮助学习http协议.htm
字号:
style="COLOR: #000000"><br>这是个会反馈 404 错误的的图片:<img src='test.jpg'><br><a href='test.jpg'>点击打开test.jpg</a><br></SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">);<BR> out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000"><form method=post action='/'>POST 表单 <input name=username value='用户'> <input name=submit type=submit value=submit></form></SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">);<BR> out.close();<BR><BR> closeSocket(client);<BR> }<BR> } </SPAN><SPAN
style="COLOR: #0000ff">catch</SPAN><SPAN
style="COLOR: #000000">(Exception e) {<BR> System.out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">HTTP服务器错误:</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN
style="COLOR: #000000">e.getLocalizedMessage());<BR> }<BR> }<BR> </SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">System.out.println(client+"连接到HTTP服务器");</SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">如果加入这一句,服务器响应速度会很慢</SPAN><SPAN
style="COLOR: #008000"><BR></SPAN><SPAN
style="COLOR: #000000"> } </SPAN><SPAN
style="COLOR: #0000ff">catch</SPAN><SPAN
style="COLOR: #000000">(Exception e) {<BR> System.out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">HTTP服务器错误:</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN
style="COLOR: #000000">e.getLocalizedMessage());<BR> }<BR> }<BR> }<BR> <BR> </SPAN><SPAN
style="COLOR: #008000">/**</SPAN><SPAN
style="COLOR: #008000"><BR> * 关闭客户端 socket 并打印一条调试信息.<BR> * </SPAN><SPAN
style="COLOR: #808080">@param</SPAN><SPAN
style="COLOR: #008000"> socket 客户端 socket.<BR> </SPAN><SPAN
style="COLOR: #008000">*/</SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff">void</SPAN><SPAN
style="COLOR: #000000"> closeSocket(Socket socket) {<BR> </SPAN><SPAN
style="COLOR: #0000ff">try</SPAN><SPAN
style="COLOR: #000000"> {<BR> socket.close();<BR> } </SPAN><SPAN
style="COLOR: #0000ff">catch</SPAN><SPAN
style="COLOR: #000000"> (IOException ex) {<BR> ex.printStackTrace();<BR> }<BR> System.out.println(socket </SPAN><SPAN
style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">离开了HTTP服务器</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">); <BR> }<BR> <BR> </SPAN><SPAN
style="COLOR: #008000">/**</SPAN><SPAN
style="COLOR: #008000"><BR> * 读取一个文件的内容并返回给浏览器端.<BR> * </SPAN><SPAN
style="COLOR: #808080">@param</SPAN><SPAN
style="COLOR: #008000"> fileName 文件名<BR> * </SPAN><SPAN
style="COLOR: #808080">@param</SPAN><SPAN
style="COLOR: #008000"> socket 客户端 socket.<BR> </SPAN><SPAN
style="COLOR: #008000">*/</SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff">void</SPAN><SPAN
style="COLOR: #000000"> fileService(String fileName, Socket socket)<BR> {<BR> <BR> </SPAN><SPAN
style="COLOR: #0000ff">try</SPAN><SPAN
style="COLOR: #000000"><BR> {<BR> PrintStream out </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN
style="COLOR: #000000"> PrintStream(socket.getOutputStream(), </SPAN><SPAN
style="COLOR: #0000ff">true</SPAN><SPAN
style="COLOR: #000000">);<BR> File fileToSend </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN
style="COLOR: #000000"> File(fileName);<BR> </SPAN><SPAN
style="COLOR: #0000ff">if</SPAN><SPAN
style="COLOR: #000000">(fileToSend.exists() </SPAN><SPAN
style="COLOR: #000000">&&</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN
style="COLOR: #000000">fileToSend.isDirectory())<BR> {<BR> out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">HTTP/1.0 200 OK</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000">返回应答消息,并结束应答</SPAN><SPAN
style="COLOR: #008000"><BR></SPAN><SPAN
style="COLOR: #000000"> out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">Content-Type:application/binary</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">);<BR> out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">Content-Length:</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #000000">+</SPAN><SPAN
style="COLOR: #000000"> fileToSend.length());</SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000"> 返回内容字节数</SPAN><SPAN
style="COLOR: #008000"><BR></SPAN><SPAN
style="COLOR: #000000"> out.println();</SPAN><SPAN
style="COLOR: #008000">//</SPAN><SPAN
style="COLOR: #008000"> 根据 HTTP 协议, 空行将结束头信息</SPAN><SPAN
style="COLOR: #008000"><BR></SPAN><SPAN
style="COLOR: #000000"> <BR> FileInputStream fis </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN
style="COLOR: #000000"> FileInputStream(fileToSend);<BR> </SPAN><SPAN
style="COLOR: #0000ff">byte</SPAN><SPAN
style="COLOR: #000000"> data[] </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">byte</SPAN><SPAN
style="COLOR: #000000">[fis.available()];<BR> fis.read(data);<BR> out.write(data);<BR> out.close();<BR> fis.close();<BR> }<BR> }<BR> </SPAN><SPAN
style="COLOR: #0000ff">catch</SPAN><SPAN
style="COLOR: #000000">(Exception e)<BR> {<BR> System.out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">传送文件时出错:</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #000000">+</SPAN><SPAN
style="COLOR: #000000"> e.getLocalizedMessage());<BR> }<BR> }<BR> <BR> </SPAN><SPAN
style="COLOR: #008000">/**</SPAN><SPAN
style="COLOR: #008000"><BR> * 打印用途说明.<BR> </SPAN><SPAN
style="COLOR: #008000">*/</SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff">private</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">static</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">void</SPAN><SPAN
style="COLOR: #000000"> usage() {<BR> System.out.println(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">Usage: java HTTPServer <port>\nDefault port is 80.</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN
style="COLOR: #000000">);<BR> }<BR> <BR> <BR> </SPAN><SPAN
style="COLOR: #008000">/**</SPAN><SPAN
style="COLOR: #008000"><BR> * 启动简易 HTTP 服务器<BR> * </SPAN><SPAN
style="COLOR: #808080">@param</SPAN><SPAN
style="COLOR: #008000"> args <BR> </SPAN><SPAN
style="COLOR: #008000">*/</SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff">public</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">static</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">void</SPAN><SPAN
style="COLOR: #000000"> main(String[] args) {<BR> </SPAN><SPAN
style="COLOR: #0000ff">try</SPAN><SPAN
style="COLOR: #000000"> {<BR> </SPAN><SPAN
style="COLOR: #0000ff">if</SPAN><SPAN
style="COLOR: #000000">(args.length </SPAN><SPAN
style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #000000">1</SPAN><SPAN
style="COLOR: #000000">) {<BR> usage();<BR> } </SPAN><SPAN
style="COLOR: #0000ff">else</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN
style="COLOR: #000000">(args.length </SPAN><SPAN
style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #000000">1</SPAN><SPAN
style="COLOR: #000000">) {<BR> PORT </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -