隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

          Java網(wǎng)絡(luò)編程從入門到精通(26):在服務(wù)端接收和發(fā)送數(shù)據(jù)

          本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

          上一篇:Java網(wǎng)絡(luò)編程從入門到精通(25):創(chuàng)建ServerSocket對(duì)象

          在建立完ServerSocket對(duì)象后,通過(guò)accept方法返回的Socket對(duì)象,服務(wù)端就可以和客戶端進(jìn)行數(shù)據(jù)交互。

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

          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(
          "服務(wù)器已經(jīng)啟動(dòng),端口:8888");
                  
          while (true)
                  {
                      Socket socket 
          = serverSocket.accept();
                      
          new HttpEchoServer(socket).start();
                  }
              }
          }

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


           

          圖1

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

          下一篇:
          Java網(wǎng)絡(luò)編程從入門到精通(27):關(guān)閉服務(wù)端連接





          Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

          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 銀河使者 閱讀(3035) 評(píng)論(2)  編輯  收藏 所屬分類: java 原創(chuàng)網(wǎng)絡(luò)編程

          評(píng)論

          # re: Java網(wǎng)絡(luò)編程從入門到精通(26):在服務(wù)端接收和發(fā)送數(shù)據(jù)  回復(fù)  更多評(píng)論   

          謝謝!學(xué)到了
          2009-07-20 20:27 | 樂(lè)蜂網(wǎng)

          # re: Java網(wǎng)絡(luò)編程從入門到精通(26):在服務(wù)端接收和發(fā)送數(shù)據(jù)  回復(fù)  更多評(píng)論   

          br.readLine()讀到末尾是因該是null吧,為什么這里判斷的是!(s = br.readLine()).equals("")
          2015-05-14 10:02 | 胥亞波
          主站蜘蛛池模板: 宜君县| 建宁县| 天津市| 拉萨市| 金川县| 财经| 惠东县| 闽清县| 元阳县| 阜阳市| 衡山县| 渝北区| 河东区| 阜平县| 建始县| 安宁市| 成安县| 龙门县| 易门县| 纳雍县| 嵩明县| 广东省| 佛冈县| 兴城市| 肇州县| 瑞金市| 青冈县| 甘泉县| 汝城县| 乳山市| 河南省| 吴旗县| 临泉县| 剑阁县| 团风县| 科尔| 福泉市| 武城县| 安图县| 广州市| 黔西县|