程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 實現簡單的多線程HTTP服務器

實現簡單的多線程HTTP服務器

編輯:關於JAVA

後期會豐富這個服務器,實現更多的功能,例如:

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/,即可看到返回結果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved