經驗不在于年限,在于積累---專注互聯網軟件開發

          把工作當事業做,把項目當作品做!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks
              本文實現了一個簡單的多線程HTTP服務器。接收HTTP GET請求,然后返回簡單的文本信息。
              后期會豐富這個服務器,實現更多的功能,例如:
          1. 支持POST方式提交
          2. 支持二進制的流傳送
          3. 支持線程池處理
          4. 采用NIO非阻塞形式實現
           1package thread;
           2
           3import java.io.BufferedReader;
           4import java.io.IOException;
           5import java.io.InputStream;
           6import java.io.InputStreamReader;
           7import java.io.OutputStream;
           8import java.io.PrintWriter;
           9import java.net.ServerSocket;
          10import java.net.Socket;
          11
          12/**
          13 *  Copyright (C): 2009
          14 *  @author 陳新漢
          15 *  Jun 27, 2009 2:39:39 PM
          16 */

          17
          18/**
          19 * Threaded Network Server
          20 * 這是一個簡單的多線程HTTP服務器
          21 * 采用多線程來處理高并發的用戶請求
          22 */

          23public class HttpServer {
          24    public static void main(String [] args){
          25        HttpServer hs=new HttpServer();
          26        int i=1, port=8888;
          27        Socket received=null;
          28        try{
          29            ServerSocket server=new ServerSocket(port);
          30            while(true){
          31                received=server.accept();
          32                if(received!=null){
          33                    hs.new ProcessThread(i++,received).start();
          34                }

          35            }

          36        }
          catch(IOException e){
          37            e.printStackTrace();
          38        }

          39    }

          40    
          41    class ProcessThread extends Thread
          42    {
          43        private int thread_number=0;
          44        private Socket received=null;
          45        
          46        public ProcessThread(int thread_number, Socket received) {
          47            super();
          48            this.thread_number = thread_number;
          49            this.received = received;
          50        }

          51
          52        public void run() {
          53            System.out.println(""+thread_number+"個處理線程啟動了……");
          54            if(received!=null){
          55                try{
          56                    System.out.println("連接用戶的地址:"+received.getInetAddress().getHostAddress());
          57                    InputStream in=received.getInputStream();
          58                    BufferedReader d= new BufferedReader(new InputStreamReader(in));
          59                    String result=d.readLine();
          60                    while(result!=null && !result.equals("")){
          61                        System.out.println(result);
          62                        result=d.readLine();
          63                    }

          64                    OutputStream out=received.getOutputStream();
          65                    PrintWriter outstream=new PrintWriter(out,true);
          66                    String msg1="<html><head><title></title></head><body><h1>收到!</h1></body></html>";
          67                    outstream.println("HTTP/1.0 200 OK");//返回應答消息,并結束應答
          68                    outstream.println("Content-Type:text/html;charset=GBK");
          69                    outstream.println();// 根據 HTTP 協議, 空行將結束頭信息
          70                    outstream.println(msg1);
          71                    outstream.flush();
          72                    outstream.close();
          73                }
          catch(IOException e){
          74                    e.printStackTrace();
          75                }
          finally{
          76                    try{
          77                        received.close();
          78                    }
          catch(IOException e){
          79                        e.printStackTrace();
          80                    }

          81                }

          82            }

          83        }

          84    }

          85}

          86

              運行這個程序啟動服務器,然后在瀏覽器地址欄輸入:http://localhost:8888/,即可看到返回結果。

              友情提醒:本博文章歡迎轉載,但請注明出處:陳新漢
          posted on 2009-09-15 12:36 hankchen 閱讀(1130) 評論(0)  編輯  收藏 所屬分類: 網絡開發+Mina+Netty
          主站蜘蛛池模板: 南乐县| 成武县| 沅江市| 淮北市| 日照市| 肇庆市| 郴州市| 滁州市| 齐齐哈尔市| 许昌市| 三门县| 洛浦县| 博罗县| 长治县| 九龙坡区| 正阳县| 太保市| 漳州市| 陇川县| 通河县| 四川省| 皋兰县| 开原市| 洛阳市| 留坝县| 南宫市| 二连浩特市| 剑阁县| 清镇市| 浪卡子县| 留坝县| 延安市| 富宁县| 南木林县| 西充县| 文登市| 香港 | 体育| 福泉市| 防城港市| 丹棱县|