码迷,mamicode.com
首页 > 编程语言 > 详细

java 线程池socket实现简单http服务器

时间:2017-04-29 11:54:09      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:length   访问   div   ted   int   请求   写入   设置   处理   

---恢复内容开始---

要点:

1.只需回应Get请求,将本地的lena.jpg返回给客户端

2.使用最基本的socket编程

3.使用线程池进行线程管理

4.将lena.jpg读入内存中,减少IO次数  

5.MyHttpServer作为服务器类,ServerThread作为服务处理线程类

 

1.加入线程池

ExecutorService pool = Executors.newFixedThreadPool(MaxClientNums);

2.有客户访问则开启服务线程并将其加入线程池

while(true){
	try {
		Socket client=server.accept();
		if(client.isConnected()){
			pool.submit(new ServerThread(client));       //利用subit加入线程池
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

3.模拟Http回应返回给客户端

				OutputStream out=client.getOutputStream();
				BufferedWriter bf=new BufferedWriter(new OutputStreamWriter(out,"UTF-8"));
				String headString="HTTP/1.1 200 OK\r\n";
				String serverString="Connection: Keep-Alive\r\n";
				String typeString="Content-Type: image/png\r\n";
				String lenString="Content-Length:"+MyHttpServer.len+" \r\n";
				String endString="\r\n";
				bf.write(headString);
				bf.write(serverString);
				bf.write(typeString);
				bf.write(lenString);
				bf.write(endString);
				bf.flush();         //注意flush

4.将图片写入缓存

设置静态变量

    static File file=new File("F:\\java\\code\\MyHttpServer\\lena.jpg");
    static ByteArrayOutputStream  bout;
    static byte[]b;
    static int len;

将图片写入byte[]b中存储

            bin=new BufferedInputStream(new FileInputStream(file));    
            //将lena.jpg写入缓存
            len=bin.available();
            bout=new ByteArrayOutputStream();        
            int length;
            byte temp[]=new byte[1024];
            while((length=bin.read(temp))!=-1){
                bout.write(temp, 0, length);
            }
            b=new byte[len];
            b=bout.toByteArray();

 

5.将图片返回给客户端

				out.write(MyHttpServer.b);
				out.flush();
				out.close();
				MyHttpServer.bin.close();

 

 

源码: http://pan.baidu.com/s/1o8wO70Y

(应付作业写的代码。。。。)

---恢复内容结束---

 

java 线程池socket实现简单http服务器

标签:length   访问   div   ted   int   请求   写入   设置   处理   

原文地址:http://www.cnblogs.com/ming-szu/p/6784682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!