<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/http-socket-get-post-upload/</link>
<title><![CDATA[简单的Socket实现的HTTP响应服务器(GET/POST/UPLOAD)]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Fri, 10 Sep 2010 03:15:06 +0000</pubDate> 
<guid>https://www.heckjj.com/http-socket-get-post-upload/</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="java" rows="15" cols="100">package test.io;

import java.net.*;
import java.io.*;

/**
 * 一个简单的Socket实现的HTTP响应服务器。<br/>
 * 只用于熟悉HTTP协议的目的，可以看到浏览器发过来的数据格式。
 */
public class MyWebServer &#123;
&nbsp;&nbsp;public static void main(String[] args) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;Socket socket = null;
&nbsp;&nbsp;&nbsp;&nbsp;try &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 创建一个监听8000端口的服务器Socket
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerSocket s = new ServerSocket(8000, 3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("MyWebServer等待来自浏览器的连接&#92;n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (true) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket = s.accept();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("连接已建立。端口号：" + socket.getPort());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new MyWebServerThread(socket).start();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (IOException e) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&#125;
&#125;

class MyWebServerThread extends Thread &#123;
&nbsp;&nbsp;private Socket socket;

&nbsp;&nbsp;MyWebServerThread(Socket socket) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;this.socket = socket;
&nbsp;&nbsp;&#125;

&nbsp;&nbsp;@Override
&nbsp;&nbsp;public void run() &#123;
&nbsp;&nbsp;&nbsp;&nbsp;try &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader is = new InputStreamReader(socket.getInputStream());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[] bs = new char[2048];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintStream out;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out = new PrintStream(socket.getOutputStream());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder msg = new StringBuilder();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 如果10毫秒还没有数据，则视同没有新的数据了。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 因为有Keep-Alive的缘故，浏览器可能不主动断开连接的。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 实际应用，会根据协议第一行是GET还是 POST确定。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.setSoTimeout(10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 此处读入请求数据并做相应的处理
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int len = -1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ((len = is.read(bs)) != -1) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.append(bs, 0, len);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.append("&#92;n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (Exception ex) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ex.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 下面是由服务器直接生成的主页内容
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 1、首先向浏览器输出响应头信息
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("HTTP/1.1 200 OK");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("Content-Type:text/html;charset:GBK");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 2、输出主页信息
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.println("<HTML><BODY>"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "<center>"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "<H1>HTTP协议测试服务器,当前时间："
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ new java.util.Date()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "</h1>"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "<form method='get'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='GET测试'/></form>
"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "<form method='post'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='POST测试'/></form>
"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "<form method='post'&nbsp;&nbsp;enctype='multipart/form-data'>phototitle:<input type='text' name='phototitle'/>photo:<input type='file' name='photo'/><input type='submit' value='Upload测试'/></form>"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "</center>您提交的数据如下:<pre>" + msg.toString() + "</pre></BODY></HTML>");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.flush();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("close");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 关闭连接
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;socket.close();
&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (IOException e) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&#125;
&#125;</textarea><br/>Tags - <a href="https://www.heckjj.com/tags/socket/" rel="tag">socket</a> , <a href="https://www.heckjj.com/tags/get/" rel="tag">get</a> , <a href="https://www.heckjj.com/tags/post/" rel="tag">post</a> , <a href="https://www.heckjj.com/tags/upload/" rel="tag">upload</a> , <a href="https://www.heckjj.com/tags/http%25E5%2593%258D%25E5%25BA%2594%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">http响应服务器</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/http-socket-get-post-upload/#blogcomment</link>
<title><![CDATA[[评论] 简单的Socket实现的HTTP响应服务器(GET/POST/UPLOAD)]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/http-socket-get-post-upload/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>