熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2022-06-13   來源: Java核心技術 

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

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

  package server;

  import *;
import javaio*;

  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());
            oswwrite(HTTP/ OK\r\n\r\n);
            String s = ;
            while (!(s = brreadLine())equals())
                oswwrite(<html><body> + s + <br></body></html>);
            oswflush();
            socketclose();
        }
        catch (Exception e)
        {
        }
    }
    public HttpEchoServer(Socket socket)
    {
        thissocket = socket;
    }
    public static void main(String[] args) throws Exception
    {
        ServerSocket serverSocket = new ServerSocket();
        Systemoutprintln(服務器已經啟動端口);
        while (true)
        {
            Socket socket = serverSocketaccept();
            new HttpEchoServer(socket)start();
        }
    }
}

  編譯並運行HttpEchoServer後在IE的地址欄中輸入URL輸出結果如圖所示

  

    圖

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


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26446.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.