夢想飛翔

          自強不息
          posts - 111, comments - 30, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          http://www.aygfsteel.com/nokiaguy/archive/2009/07/20/287462.html


          在建立完ServerSocket對象后,通過accept方法返回的Socket對象,服務端就可以和客戶端進行數據交互。

          Socket類和ServerSocket類都有兩個得到輸入輸出流的方法:getInputStreamgetOutputStream。對于Socket類而言,使用getInputStream方法得到的InputStream是從服務端獲取數據,而getOutputStream方法得到的OutputStream是向服務端發送數據。而ServerSocketgetInputStreamgetOutputStream方法也類似。InputStream從客戶端讀取數據,OutputStream向客戶端發送數據。下面的代碼是一個接收HTTP請求,并返回HTTP請求頭信息的程序,它演示了ServerSocket類如何讀取和發送來自客戶端的數據。

          package server;

          import java.net.*;
          import java.io.*;

          public class HttpEchoServer extends Thread
          {
              
          private Socket socket;
              
          public void run()
              {
                  
          try
                  {
                      InputStreamReader isr 
          = new InputStreamReader(socket
                                      .getInputStream());
                      BufferedReader br 
          = new BufferedReader(isr);
                      OutputStreamWriter osw 
          = new OutputStreamWriter(socket
                                      .getOutputStream());
                      osw.write(
          "HTTP/1.1 200 OK\r\n\r\n");
                      String s 
          = "";
                      
          while (!(s = br.readLine()).equals(""))
                          osw.write(
          "<html><body>" + s + "<br></body></html>");
                      osw.flush();
                      socket.close();
                  }
                  
          catch (Exception e)
                  {
                  }
              }
              
          public HttpEchoServer(Socket socket)
              {
                  
          this.socket = socket;
              }
              
          public static void main(String[] args) throws Exception
              {
                  ServerSocket serverSocket 
          = new ServerSocket(8888);
                  System.out.println(
          "服務器已經啟動,端口:8888");
                  
          while (true)
                  {
                      Socket socket 
          = serverSocket.accept();
                      
          new HttpEchoServer(socket).start();
                  }
              }
          }

          編譯并運行HttpEchoServer后,在IE的地址欄中輸入URLhttp://localhost:8888。輸出結果如圖1所示。

            上面的代碼并未驗證HTTP請求類型,因此,GET、POST、HEADHTTP請求都可以得到回應。在接收客戶端請求后,只向客戶端輸出了一行HTTP響應頭信息(包括響應碼和HTTP版本號),對于HTTP響應頭來說,這一行是必須有的,其他的頭字段都是可選的。上面的代碼每讀一行請求頭信息,就向客戶端寫一行響應信息。最后使用了flush方法將輸出緩沖區中的內容發送的客戶端。這是必須的,只要使用OutputStream,在最后就必須要調用flush方法(Socket類中使用OutputStream也是一樣)。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 永州市| 民和| 阳山县| 玉屏| 措勤县| 葫芦岛市| 丹巴县| 屏山县| 横山县| 英德市| 平原县| 靖西县| 吉木乃县| 呼伦贝尔市| 信阳市| 赣榆县| 乌拉特中旗| 深水埗区| 万全县| 吉木萨尔县| 囊谦县| 会泽县| 蓝山县| 南宫市| 益阳市| 肥乡县| 阳山县| 太保市| 浦江县| 丹凤县| 陈巴尔虎旗| 东源县| 双柏县| 铁岭市| 乳山市| 南平市| 鄢陵县| 商丘市| 卢氏县| 池州市| 山东省|