程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java網絡編程從入門到精通(26):在服務端接收和發送數據

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

編輯:關於JAVA

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

Socket類和ServerSocket類都有兩個得到輸入輸出流的方法:getInputStream和getOutputStream。對於Socket類而言,使用getInputStream方法得到的InputStream是從服務端獲取數據,而getOutputStream方法得到的OutputStream是向服務端發送數據。而ServerSocket的getInputStream和getOutputStream方法也類似。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的地址欄中輸入URL:http://localhost:8888。輸出結果如圖1所示。

圖1

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

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