工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks

              java在網絡編程這個地方做的很好,java的主要目的也是為了網絡而生的,它能方便的訪問網絡上的資源。我們這節課來介紹網絡通訊的兩種機制:URL通信機制,Socket通信機制。

              URL表示了Internet上一個資源的引用或地址。java網絡應用程序也是使用URL來定位要訪問的Internet的資源。在jdk里面java.net.URL也是一個類,它來封裝URL的一些細節。目前大家可以把URL理解為網址,default.aspx 這就是個URLhttp是協議名(超文本傳輸協議)用“://”隔開www.100jq.com 是主機名。Default.aspx是文件名。它的端口號沒有寫,默認是80

          實踐:

          import java.net.*;

          public class ParseURL {

              public static void main(String[] args) throws MalformedURLException{

                 URL url = new URL("http://www.100jq.com:45175/default.aspx");

                 System.out.println("協議是 "+url.getProtocol());

                 System.out.println("主機是 "+url.getHost());

                 System.out.println("文件名是 "+url.getFile());

                 System.out.println("端口號是 "+url.getPort());

              }}

          /*

             URL這個對象中提供了很多方法像是

             getProtocol()

             getHost()

             getFile()

             getPort()

          */

          我們可以通過URL對文件或資源讀取,也可以通過URLConnection讀取,也可以通過這個寫入數據限于cgi腳本。

          實踐:

          import java.net.*;

          import java.io.*;

          public class URLConnectionReader {

              public static void main(String[] args) throws IOException {

                 URL google = new URL("");

                 URLConnection g = google.openConnection();

                 BufferedReader in = new BufferedReader(new InputStreamReader(g.getInputStream()));

                 String inputLine;

                 while ((inputLine=in.readLine())!=null)

                     System.out.println(inputLine);

                     in.close();

              }}

          URLURLConnection類提供了較高層次的網絡訪問。有時候需要進行較低層次的訪問。編寫C/S模型的程序時,就要使用Socket通信機制了。因為在網絡上不一定非得訪問文件。

          實踐://先寫個客戶端的應用

          import java.net.*;

          import java.io.*;

          public class SimpleClient {

           public static void main(String args[]) {

              try {

                // 5432端口打開服務器連接

                // 在這里用localhost127.0.0.1是一個意思

                Socket s1 = new Socket("127.0.0.1", 5432); 

                // 對這個端口連接一個reader,注意端口不能夠占用別的

                BufferedReader br = new BufferedReader(

                  new InputStreamReader(s1.getInputStream()));

                // 讀取輸入的數據并且打印在屏幕上

                System.out.println(br.readLine());

                //當完成時關閉流和連接

                br.close();

                s1.close();

              } catch (ConnectException connExc) {

                System.err.println("Could not connect to the server.");

              } catch (IOException e) {

                // ignore

              }}}

          //這是服務端的應用

          import java.net.*;

          import java.io.*;

          public class SimpleServer {

           public static void main(String args[]) {

              ServerSocket s = null;

              // 注冊服務端口為5432

              try {

                s = new ServerSocket(5432);

              } catch (IOException e) {

                e.printStackTrace();

              }

            // 運行監聽器并接收,永遠循環下去。因為服務器總要開啟的

              while (true) {

                try {

                  // 等待一個連接的請求

                  Socket s1 = s.accept();

                  // 得到端口的輸出流

                  OutputStream s1out = s1.getOutputStream();

                  Bufferedwriter bw = new Bufferedwriter(

                    new OutputStreamWriter(s1out));

                  // 發送一個字符串

                  bw.write("百家拳軟件項目研究室歡迎您!\n");

                  // 關閉這個連接, 但不是服務端的socket

                  bw.close();

                  s1.close();

                } catch (IOException e) {

                  e.printStackTrace();

                }}}}上述例子打包下載

          執行這個程序和其它的不太一樣,先用javac將兩個文件編譯之后。然后敲start開啟另一個窗口。用start命令開啟的窗口繼承了原來窗口的特性。如圖26-1所示

          26-1

          接著在原來的窗口上執行服務端程序java SimpleServer.在新窗口中執行java SimpleClient 就會看到結果了。注意如果如果在啟動服務端的時候拋出bindException則說明5432這個端口已經被別的程序占用著,改成別的端口號就可以了。通常選用端口的時候,其數字最好不要小于1024,1024一下的端口很多都是專用的端口。

          posted on 2007-08-09 19:54 王君 閱讀(173) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 眉山市| 黄浦区| 海阳市| 特克斯县| 天台县| 阿坝县| 峨边| 中山市| 静宁县| 巴南区| 河西区| 天全县| 抚顺县| 新化县| 台北市| 孝感市| 林口县| 晋州市| 蕉岭县| 宜城市| 台州市| 东山县| 吴忠市| 内乡县| 阿城市| 屏南县| 萨迦县| 阿鲁科尔沁旗| 东辽县| 资中县| 无锡市| 龙南县| 崇信县| 忻州市| 濮阳市| 阆中市| 舟山市| 侯马市| 喀什市| 德兴市| 宣恩县|