<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

    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 銀河使者 閱讀(3016) 評論(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 | 胥亞波
    主站蜘蛛池模板: 羞羞视频免费网站日本| 亚洲成a人无码亚洲成av无码| caoporm超免费公开视频| 小小影视日本动漫观看免费| 亚洲欧美日韩一区二区三区| 久久精品女人天堂AV免费观看| 亚洲不卡在线观看| 成人免费视频小说| 国产亚洲视频在线播放大全| 免费少妇a级毛片| xxxxxx日本处大片免费看| 亚洲中文字幕久久精品无码喷水| 国产特黄一级一片免费| 国产亚洲成av片在线观看| 日本免费在线观看| 亚洲美女中文字幕| 国产精品免费观看久久| 最好2018中文免费视频| 在线A亚洲老鸭窝天堂| 亚欧免费一级毛片| 亚洲国产成人资源在线软件| 在线观看视频免费国语| 美女裸体无遮挡免费视频网站| 国产亚洲精久久久久久无码77777| 国产在线观看免费视频软件| 亚洲va中文字幕无码久久| 在线观看片免费人成视频播放| 亚洲AV无码一区二区三区系列| 免费下载成人电影| 日日摸日日碰夜夜爽亚洲| 亚洲熟妇丰满多毛XXXX| 四虎在线成人免费网站| WWW亚洲色大成网络.COM| 国产亚洲精AA在线观看SEE| 免费看污成人午夜网站| 成人免费网站久久久| 久久亚洲日韩看片无码| 国产免费观看视频| 99久久人妻精品免费一区| 亚洲av永久无码一区二区三区| 久久久久亚洲AV成人网|