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

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

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

    如鵬網(wǎng) 大學(xué)生計算機(jī)學(xué)習(xí)社區(qū)

    CowNew開源團(tuán)隊

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
    原文:http://blog.csdn.net/nileel/archive/2007/04/17/1567656.aspx

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

    Java C#
    應(yīng)答/請求:
    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


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


    應(yīng)答/請求層:

      這個層次抽象掉了所有網(wǎng)絡(luò)層的細(xì)節(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類有可以異步地獲得流進(jìn)行寫或從中讀數(shù)據(jù)的流的方法,或者可以從中讀取數(shù)據(jù)的WebResponse對象。

      協(xié)議層:

      對于熟悉java.net.Socket的Java編程人員對于System.Net.Sockets.TCPClient應(yīng)該非常熟悉,因為二者是非常相似的。由于編程人員無須處理套接字的實現(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的連接中。同樣功能的程序可以以相同的風(fēng)格在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)是為每個接收的套接字產(chǎn)生一個線程。在C#中也可以作同樣的處理,Socket類提供了使用帶有select方法的事件驅(qū)動的接口。(在事件驅(qū)動方式下對套接字編程已經(jīng)超出了本文的范圍。)

      原始套接字層:

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久被窝电影亚洲爽爽爽| 免费a级毛片无码a∨蜜芽试看| 精品久久久久久久免费人妻| 2020久久精品亚洲热综合一本| 1000部国产成人免费视频| 噜噜噜亚洲色成人网站∨| 97精品免费视频| 亚洲国产精品成人综合久久久| 4hu四虎最新免费地址| 激情内射亚洲一区二区三区爱妻| 欧美a级在线现免费观看| 亚洲一日韩欧美中文字幕在线| 免费无码AV电影在线观看| 亚洲风情亚Aⅴ在线发布| 国产午夜免费福利红片| 四虎一区二区成人免费影院网址 | 美女视频黄a视频全免费网站色| 拔擦拔擦8x华人免费久久| 青青视频免费在线| 国产亚洲精久久久久久无码AV| 中国人免费观看高清在线观看二区| 亚洲欧洲国产精品香蕉网| 99re6免费视频| 亚洲精品无码久久久久A片苍井空| 四虎永久在线免费观看| 高清永久免费观看| 亚洲黄色网站视频| 国产精品深夜福利免费观看| 中文字幕乱理片免费完整的| 中文字幕在线观看亚洲| 日本免费网站观看| 久久精品国产免费| 亚洲日韩一区二区一无码| 久久国产成人精品国产成人亚洲| 大地资源中文在线观看免费版| 亚洲国产精品免费观看 | 亚洲日本一区二区| 好吊妞在线成人免费| 国产在线国偷精品免费看| 亚洲一级大黄大色毛片| 亚洲一区二区精品视频|