誰持彩練當空舞"-- 看Java、C#大比拚(3)

應答/請求層:
    
      這個層次抽象掉了所有網絡層的細節,提供了一個可以雙向傳輸數據的象流那樣的接口。Java可以接受HTTP URL,並通過下面的命令完成GET命令:
    
    URL url= new URL( "http://to.post.to.com" );
    URLConnection urlConnection url.openConnection();
    InputStream input urlConnection.getInputStream();
    ... read stuff from input ...
    input.close();
    
      C#通過System.Net.WebRequest對象完成同樣的功能:
    
     WebRequest request= WebRequestFactory.Create(
      "http://to.post.to.com" );
     Stream input request.GetResponse().GetResponseStream();
     ... read stuff from input ...
     input.Close();
    
      二種語言都隱藏了底層的套接字創建HTTP協議要求,而是提供了編程人員可以用來發送和接收數據的流。與C#中的Stream類一樣,WebRequest類有可以異步地獲得流進行寫或從中讀數據的流的方法,或者可以從中讀取數據的WebResponse對象。
    
      協議層:
    
      對於熟悉java.net.Socket的Java編程人員對於System.Net.Sockets.TCPClient應該非常熟悉,因爲二者是非常相似的。由於編程人員無須處理套接字的實現,而只須返回一個可供使用的流,因此二者的API和功能都非常相似。
    
      在Java中可以使用下面的命令實現一個非常簡單的telnet客戶端:
    
    Socket telnet= new Socket( "telnet.host.com", 23 );
    OutputStream output= telnet.getOutputStream();
    InputStream input= telnet.getInputStream();
    
      二個流都可用於與telnet同telnet.host.com的連接中。同樣功能的程序可以以相同的風格在C#中用下面的方式實現:
    
    TCPClient telnet= new TCPClient( "telnet.host.com", 23 );
    Stream telnetStream= telnet.GetStream();
    StreamWriter output =new StreamWriter( telnetStream );
    StreamReader input =new StreamReader( telnetStream );
    
    
      接收TCP/IP連接在二種語言中幾乎是相同的。在Java中,可以用下面的命令建立、並接收TCP/IP連接:
    
    ServerSocket server= new ServerSocket( 23 );
    Socket accept =server.accept();
    
    
      在C#中的實現方式如下:
    
    TCPListener server= new TCPListener( 23 );
    server.Start();
    Socket accept= server.Accept();
    
    
      在二種語言中,每個接收的套接字都需要單獨處理。在Java中,比較好的方法(直到Java 1.4)是爲每個接收的套接字產生一個線程。在C#中也可以作同樣的處理,Socket類提供了使用帶有select方法的事件驅動的接口。(在事件驅動方式下對套接字編程已經超出了本文的範圍。)
    
      原始套接字層:
    
      這一部分的內容對於大多數Java程序員來說都是陌生的。由於被java.net.Socket和 java.net.DatagramSocket二個類進行了抽象,只使用Java編程語言的編程人員幾乎無需瞭解Berkeley套接字的實現。通過對Berkeley Socket類進行操作,同樣可以實現Java中的流功能。
    至此,我們已經用C#中的命令實現了大多數在Java中被抽象的功能━━對I/O和網絡的操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章