如鵬網 大學生計算機學習社區(qū)

          CowNew開源團隊

          http://www.cownew.com 郵件請聯(lián)系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

          公告

          “如鵬教育”(http://www.RuPeng.com )是一個為計算機、信息等IT類專業(yè)在校大學生服務的學習社區(qū)。 每周舉辦免費講座,為大一新生答疑解惑,幫大二、大三學生解決學習問題,幫同學提高實戰(zhàn)開發(fā)能力,幫大四學生增強求職技巧,成功應聘名企。

          常用鏈接

          留言簿(83)

          隨筆分類

          隨筆檔案

          新聞檔案

          相冊

          友情鏈接

          團隊成員

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          原文:http://blog.csdn.net/nileel/archive/2007/04/17/1567656.aspx

          Java和C#都提供了對網絡的不同抽象層,編程人員可以使用不同的網絡接口完成對網絡的操作。

          Java C#
          應答/請求:
          java.net.URL和java.net.URLConnection。
          System.Net.WebRequest。

          協(xié)議:
          TCP/IP協(xié)議使用java.net.Socket和java.net.ServerSocket;
          UDP協(xié)議使用java.net.DatagramSocket和java.net.MulticastSocket。
          CP/IP協(xié)議使用System.Net.Sockets.TCPListener和System.Net.Sockets.TCPClient;
          UDP協(xié)議使用TSystem.Net.Sockets.UDPClient

          原始套接字層:
          沒有。
          System.Net.Sockets.Socket


            應答/請求層可以用于HTTP類的請求,其中的一端開始啟動一個連接,發(fā)送一些字節(jié)的數(shù)據(jù),然后停止,等待對方作為應答發(fā)回的一些字節(jié)。對于象流這樣更靈活的操作,協(xié)議層的用處更大。對于大多數(shù)的Java編程人員來說,除非需要完成性能非常高的網絡操作,不需要對套接字進行直接控制。如果需要。C#仍然提供了對原始的Berkeley套接字進行控制的能力。


          應答/請求層:

            這個層次抽象掉了所有網絡層的細節(jié),提供了一個可以雙向傳輸數(shù)據(jù)的象流那樣的接口。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();

            二種語言都隱藏了底層的套接字創(chuàng)建HTTP協(xié)議要求,而是提供了編程人員可以用來發(fā)送和接收數(shù)據(jù)的流。與C#中的Stream類一樣,WebRequest類有可以異步地獲得流進行寫或從中讀數(shù)據(jù)的流的方法,或者可以從中讀取數(shù)據(jù)的WebResponse對象。

            協(xié)議層:

            對于熟悉java.net.Socket的Java編程人員對于System.Net.Sockets.TCPClient應該非常熟悉,因為二者是非常相似的。由于編程人員無須處理套接字的實現(xiàn),而只須返回一個可供使用的流,因此二者的API和功能都非常相似。

            在Java中可以使用下面的命令實現(xiàn)一個非常簡單的telnet客戶端:

          Socket telnet= new Socket( "telnet.host.com", 23 );
          OutputStream output= telnet.getOutputStream();
          InputStream input= telnet.getInputStream();

            二個流都可用于與telnet同telnet.host.com的連接中。同樣功能的程序可以以相同的風格在C#中用下面的方式實現(xiàn):

          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#中的實現(xiàn)方式如下:

          TCPListener server= new TCPListener( 23 );
          server.Start();
          Socket accept= server.Accept();


            在二種語言中,每個接收的套接字都需要單獨處理。在Java中,比較好的方法(直到Java 1.4)是為每個接收的套接字產生一個線程。在C#中也可以作同樣的處理,Socket類提供了使用帶有select方法的事件驅動的接口。(在事件驅動方式下對套接字編程已經超出了本文的范圍。)

            原始套接字層:

            這一部分的內容對于大多數(shù)Java程序員來說都是陌生的。由于被java.net.Socket和 java.net.DatagramSocket二個類進行了抽象,只使用Java編程語言的編程人員幾乎無需了解Berkeley套接字的實現(xiàn)。通過對Berkeley Socket類進行操作,同樣可以實現(xiàn)Java中的流功能。
          至此,我們已經用C#中的命令實現(xiàn)了大多數(shù)在Java中被抽象的功能━━對I/O和網絡的操作。
          posted on 2007-11-23 00:02 CowNew開源團隊 閱讀(611) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 玉溪市| 曲沃县| 吴桥县| 霍林郭勒市| 高淳县| 呈贡县| 永济市| 汶上县| 子长县| 宁蒗| 通州区| 长沙市| 鹰潭市| 孟津县| 仪陇县| 辰溪县| 柘荣县| 元氏县| 乐都县| 中宁县| 丰都县| 武义县| 嵊泗县| 定结县| 治县。| 凤阳县| 乌鲁木齐县| 临泽县| 滁州市| 武穴市| 阿巴嘎旗| 安龙县| 望都县| 上杭县| 陇川县| 哈巴河县| 水城县| 雅安市| 榕江县| 道孚县| 镇巴县|