<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 銀河使者 閱讀(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 | 胥亞波
    主站蜘蛛池模板: 黄色网址在线免费| a在线观看免费网址大全| 亚洲一级毛片免费在线观看| 亚洲精品高清无码视频| 久久免费国产精品一区二区| 亚洲av中文无码乱人伦在线r▽| 最近国语视频在线观看免费播放| 亚洲一区AV无码少妇电影☆| 成人无码精品1区2区3区免费看| 亚洲精品亚洲人成在线观看| 成人久久免费网站| 亚洲视频免费在线看| 桃子视频在线观看高清免费完整| 亚洲精品午夜视频| 大地资源二在线观看免费高清| 亚洲最大无码中文字幕| 免费jjzz在线播放国产| 成人毛片100免费观看| 亚洲AV无一区二区三区久久| 免费黄色福利视频| 亚洲人成色777777老人头| 免费在线观看中文字幕| a级特黄毛片免费观看| 亚洲电影在线免费观看| 操美女视频免费网站| 免费播放国产性色生活片| 亚洲国产精品成人精品无码区 | 亚洲人成色77777在线观看大| 国产成人自产拍免费视频| 亚洲成色999久久网站| 一区二区无码免费视频网站| 美女视频免费看一区二区| 亚洲人成图片小说网站| 桃子视频在线观看高清免费完整 | 亚洲AV无码无限在线观看不卡| 国产精品无码素人福利免费| 丝瓜app免费下载网址进入ios| 亚洲熟妇av一区二区三区下载| 四虎影视在线永久免费观看| 鲁丝片一区二区三区免费| 亚洲熟妇AV乱码在线观看|