• java 简单http服务器(socket 线程池 传输内容写入缓存)


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

    要点:

    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
    ";
    				String serverString="Connection: Keep-Alive
    ";
    				String typeString="Content-Type: image/png
    ";
    				String lenString="Content-Length:"+MyHttpServer.len+" 
    ";
    				String endString="
    ";
    				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

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

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

  • 相关阅读:
    关于1961年4月16日尤文图斯91国际米兰的故事
    《转》struts2动态方法配置 Action,使一个Action可处理多请求
    struts2跳转后总是会返回input
    CentOS设置服务开机自动启动【转】
    CentOS 6.2系统安装后的初始环境设置
    Ubuntu安装小技巧 拔掉网线
    虚拟机最小安装CentOS 6.2
    CentOS 6.2配置MySQL服务器
    CentOS修改机器名称
    配置GNOME环境
  • 原文地址:https://www.cnblogs.com/ming-szu/p/6784682.html
Copyright © 2020-2023  润新知