隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0

          導航

          <2009年7月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          公告

          關注我的新浪微博

          我的著作









          常用鏈接

          留言簿(126)

          我參與的團隊

          隨筆分類(818)

          隨筆檔案(310)

          文章分類(1)

          文章檔案(8)

          相冊

          ADSL、3G查詢

          CSDN

          eclipse

          ibm

          Java EE

          Linux

          Web

          云服務

          代理網站

          關注的網站

          協議

          喜歡的Blog

          國內廣告平臺

          圖書出版

          在線培訓

          開發工具

          微博客戶端

          手機鈴聲

          操作系統

          • ReactOS
          • 一個與windowXP/2003兼容的操作系統

          數學

          文件格式

          源碼資源

          移動(Mobile)

          編程語言

          英語學習

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1974481
          • 排名 - 6

          最新評論

          閱讀排行榜

          評論排行榜

          Java網絡編程從入門到精通(26):在服務端接收和發送數據

          本文為原創,如需轉載,請注明作者和出處,謝謝!

          上一篇:Java網絡編程從入門到精通(25):創建ServerSocket對象

          在建立完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所示。


           

          圖1

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

          下一篇:
          Java網絡編程從入門到精通(27):關閉服務端連接





          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-07-20 13:53 銀河使者 閱讀(3041) 評論(2)  編輯  收藏 所屬分類: java 原創網絡編程

          評論

          # re: Java網絡編程從入門到精通(26):在服務端接收和發送數據  回復  更多評論   

          謝謝!學到了
          2009-07-20 20:27 | 樂蜂網

          # re: Java網絡編程從入門到精通(26):在服務端接收和發送數據  回復  更多評論   

          br.readLine()讀到末尾是因該是null吧,為什么這里判斷的是!(s = br.readLine()).equals("")
          2015-05-14 10:02 | 胥亞波
          主站蜘蛛池模板: 双城市| 商南县| 桂东县| 内乡县| 称多县| 连南| 观塘区| 施秉县| 五寨县| 东乌珠穆沁旗| 清流县| 青海省| 瑞金市| 镶黄旗| 明水县| 平昌县| 灌阳县| 湖北省| 丹东市| 定结县| 湘乡市| 甘南县| 咸阳市| 旌德县| 西吉县| 永兴县| 大厂| 德州市| 礼泉县| 肇源县| 成武县| 盐边县| 安康市| 泽普县| 九江市| 即墨市| 鱼台县| 陆川县| 普格县| 扶绥县| 佛坪县|