經(jīng)驗(yàn)不在于年限,在于積累---專注互聯(lián)網(wǎng)軟件開發(fā)

          把工作當(dāng)事業(yè)做,把項(xiàng)目當(dāng)作品做!

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 66 Comments :: 0 Trackbacks
              本文實(shí)現(xiàn)了一個(gè)簡單的多線程HTTP服務(wù)器。接收HTTP GET請求,然后返回簡單的文本信息。
              后期會豐富這個(gè)服務(wù)器,實(shí)現(xiàn)更多的功能,例如:
          1. 支持POST方式提交
          2. 支持二進(jìn)制的流傳送
          3. 支持線程池處理
          4. 采用NIO非阻塞形式實(shí)現(xiàn)
           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 * 這是一個(gè)簡單的多線程HTTP服務(wù)器
          21 * 采用多線程來處理高并發(fā)的用戶請求
          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+"個(gè)處理線程啟動(dòng)了……");
          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");//返回應(yīng)答消息,并結(jié)束應(yīng)答
          68                    outstream.println("Content-Type:text/html;charset=GBK");
          69                    outstream.println();// 根據(jù) HTTP 協(xié)議, 空行將結(jié)束頭信息
          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

              運(yùn)行這個(gè)程序啟動(dòng)服務(wù)器,然后在瀏覽器地址欄輸入:http://localhost:8888/,即可看到返回結(jié)果。

              友情提醒:本博文章歡迎轉(zhuǎn)載,但請注明出處:陳新漢
          posted on 2009-09-15 12:36 hankchen 閱讀(1130) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)開發(fā)+Mina+Netty
          主站蜘蛛池模板: 唐山市| 永新县| 五河县| 怀远县| 西吉县| 南阳市| 东莞市| 黔西县| 漾濞| 会宁县| 公主岭市| 寿宁县| 深泽县| 大名县| 绥阳县| 武义县| 左权县| 元阳县| 安阳县| 伊宁市| 五指山市| 丰镇市| 岱山县| 宝鸡市| 曲阳县| 涟源市| 临洮县| 苏尼特右旗| 靖远县| 清苑县| 安阳县| 广汉市| 临洮县| 楚雄市| 莎车县| 碌曲县| 白水县| 聂拉木县| 福贡县| 垫江县| 郯城县|