JAVA酱油笔记之Socket实现HTTP服务器

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

public class TestServer{
	
	public static void main (String[] args) {
		Socket socket = null;   
		try {   
			// 创建一个监听8000端口的服务器Socket   
			ServerSocket s = new ServerSocket(8080, 3);   
			System.out.println("开始等待来自浏览器的连接\n");   
			while (true) {   
				socket = s.accept();
				System.out.println ();   
				System.out.println("连接已建立。");
				System.out.println ("端口号:" + socket.getPort());   
				new WebServerThread(socket).start();   
			}   
		} catch (IOException e) {   
			e.printStackTrace();   
		}   
	}
}

class WebServerThread extends Thread {   
	private Socket socket;   
	
	WebServerThread(Socket socket) {   
	this.socket = socket;   
	}   
	
	@Override  
	public void run() {   
		try {   
			InputStreamReader is = new InputStreamReader(socket.getInputStream());   
			char[] bs = new char[2048];   
			PrintStream out;   
			out = new PrintStream(socket.getOutputStream());   
			StringBuilder msg = new StringBuilder();   
			// 如果10毫秒还没有数据,则视同没有新的数据了。   
			// 因为有Keep-Alive的缘故,浏览器可能不主动断开连接的。   
			// 实际应用,会根据协议第一行是GET还是 POST确定。   
			socket.setSoTimeout(10);   
			//   
			// 此处读入请求数据并做相应的处理   
			//   
			int len = -1;   
			try {   
				while ((len = is.read(bs)) != -1) {   
					msg.append(bs, 0, len);   
					msg.append("\n");   
				}   
			} catch (Exception ex) {   
				ex.printStackTrace();   
			}   
			// 下面是由服务器直接生成的主页内容   
			// 1、首先向浏览器输出响应头信息   
			out.println("HTTP/1.1 200 OK");   
			out.println("Content-Type:text/html;charset:GBK");   
			out.println();   
			// 2、输出主页信息   
			out.println("<HTML>Hello World!</HTML>");
			out.flush();   
			out.close();   
			is.close();   
			System.out.println("close");   
			// 关闭连接   
			socket.close();   
		} catch (IOException e) {   
			e.printStackTrace();   
		}   
	}   
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值