工作小驛

          Ninja!

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

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

              URL表示了Internet上一個資源的引用或地址。java網(wǎng)絡應用程序也是使用URL來定位要訪問的Internet的資源。在jdk里面java.net.URL也是一個類,它來封裝URL的一些細節(jié)。目前大家可以把URL理解為網(wǎng)址,default.aspx 這就是個URLhttp是協(xié)議名(超文本傳輸協(xié)議)用“://”隔開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("協(xié)議是 "+url.getProtocol());

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

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

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

              }}

          /*

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

             getProtocol()

             getHost()

             getFile()

             getPort()

          */

          我們可以通過URL對文件或資源讀取,也可以通過URLConnection讀取,也可以通過這個寫入數(shù)據(jù)限于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類提供了較高層次的網(wǎng)絡訪問。有時候需要進行較低層次的訪問。編寫C/S模型的程序時,就要使用Socket通信機制了。因為在網(wǎng)絡上不一定非得訪問文件。

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

          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()));

                // 讀取輸入的數(shù)據(jù)并且打印在屏幕上

                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();

              }

            // 運行監(jiān)聽器并接收,永遠循環(huán)下去。因為服務器總要開啟的

              while (true) {

                try {

                  // 等待一個連接的請求

                  Socket s1 = s.accept();

                  // 得到端口的輸出流

                  OutputStream s1out = s1.getOutputStream();

                  Bufferedwriter bw = new Bufferedwriter(

                    new OutputStreamWriter(s1out));

                  // 發(fā)送一個字符串

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

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

                  bw.close();

                  s1.close();

                } catch (IOException e) {

                  e.printStackTrace();

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

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

          26-1

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

          posted on 2007-08-09 19:54 王君 閱讀(173) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 革吉县| 湘西| 都兰县| 广东省| 琼中| 肇源县| 安吉县| 临桂县| 商城县| 铜山县| 昆山市| 三都| 南宁市| 商河县| 广宗县| 黔西县| 南汇区| 平利县| 宣恩县| 潞城市| 始兴县| 怀来县| 偃师市| 玉树县| 东台市| 平远县| 元江| 甘南县| 隆昌县| 玉树县| 大同县| 齐齐哈尔市| 手游| 池州市| 天门市| 新乡县| 遂昌县| 朝阳市| 隆林| 开阳县| 大冶市|