国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JAVA數據流的應用

2019-11-18 11:51:53
字體:
來源:轉載
供稿:網友

  java 數 據 流 的 應 用
  ---- 常 常 逛WWW 的 人, 一 定 不 會 對 許 多 起 始 頁 的 計 數 器 感 到 陌 生。 當 你 每 一 次 光 臨 某 些 站 點 的 起 始 頁 時, 起 始 頁 的 計 數 器 就 會 親 切 的 告 訴 你, 從 某 年 某 月 某 日 開 始 算 起, 您 是 第 幾 個 光 臨 這 個 起 始 頁 的 人。 你 可 能 知 道 這 是 用CGI 做 的, 后 面 是 什 么 ? 不 是 十 分 清 楚 吧 ! 我 們 這 里 來 分 析 一 下 計 數 器 吧; 如 是 我 寫 下 本 文。 當 你 看 完 本 文 之 后 人 你 會 覺 得 計 數 器 是 這 樣 的 簡 單、 以 后 上Internet 網 時 不 會 覺 得 漂 亮 的 是 多 么 的 復 雜, 而 是 一 個CGI 和 數 據 流 的 杰 作。 看 看 吧 是 多 么 的 平 常 !
  
  import java.net.*;
  import java.io.*;
  import java.awt.*;
  
  ---- 在 這 里 小 程 序 引 入 了 三 類 庫。 都 是 標 準 類 庫, 為 了 使 用 數 據 流 而 引 入 了java.io.* 類 庫; 為 了 使 用URL 引 入 了java.net.* 類 庫; 同 時 為 了 在 字 形 與 圖 形 引 入 了java.awt.* 類 庫。
  
  public class JavaCounter extends java.applet.Applet
  這里擴展了Applet,這里的JavaCounter是繼續了Applet的屬性。
  
  {
  Font fn=new Font("TimesRoman",Font.BOLD,24);
  設置了顯示的字形和使用的確24點字模。
  String counter_str,myurl;
  String filename;
  取得資源Counter。
  public void init()
  
  ---- 關 鍵 字public 告 訴java 編 譯 器 其 它 對 象 從 類Applet 的 外 部 調 用init 函 數 關 鍵 字void 告 訴java 編 譯 器init 不 向PRowser 返 回 任 何 值。
  
   {
   filename=getParameter("filename");
   if(filename==null) filename="home.txt";
   myurl="http://202.115.144.32/cgi-bin/counter.exe?home.txt";
   try{
   URL serverURL=new URL(myurl);
   DataInputStream dis;
   dis=new DataInputStream(serverURL.openStream());
   counter_str=dis.readLine();
   counter_str=dis.readLine();
   dis.close();
   }
   catch(MalformedURLException mfURLe) {}
   catch(IOException ioe) {}
   }
  
  ---- 這 里 我 們 從 網 絡 的 遠 程 取 得 數 據 文 件 的 過 程。 注: 雖 然 有 此URL 位 置 看 起 來 長, 但 在JAVA 中 基 本 上 是 一 資 源 的 傳 輸 協 議, 加 上 一 個 資 源 的 名 稱。 如 上 面 中 的HTTP 一 樣 都 是 典 型 的 傳 輸 協 議。 通 常 具 有 一 個 或 多 個 結 構。 為 了 處 理 方 便, 在JAVA 中 特 別 為URL 位 置 設 計 了URL 類, 可 以 用 一 個URL 對 象 記 錄 下 完 整 的URL 信 息, 這 里 我 們 使 用 的 就 是URL。 同 時 我 們 用 了java.io.*; 中 的 數 據 流 的 程 序 包。 數 據 流 可 以 看 作 是 數 據 的 通 信 途 徑。 通 常 是 建 立 一 條 數 據 通 道 后 在 程 序 讀 取 時 向 這 個 通 道 發 送 信 號、 遠 方 數 據 自 動 送 來 的 過 程 我 們 叫 做" 數 據 流"。 而 本 程 序 主 要 部 分 也 是 這 些。
  
  public void paint(Graphics g)
   {
   g.setFont(fn);
   g.setColor(Color.blue);
   g.drawString("慶祝吧!
   第"counter_str"位朋友您的到來!",10,50);
   }
  
  ---- 當 我 們 從 數 據 流 收 到 信 息 后, 就 由Applet 中 的 方 法paint 去 處 理, 并 把 設 好 的 字 形 顯 示 于 屏 幕 上。
  
  }
  
  ---- 注: 編 好 這 個 程 序 之 后 還 要 一 個CGI 程 序 才 能 發 揮 作 用。 還 是 說 一 下CGI 的 其 本 思 路 吧 ! 我 們 先 打 開"counter.exe?home.txt" 的 記 錄 讀 出 記 錄 加1 并 更 新 數 據 關 閉 記 錄。 并 輸 出 記 錄 通 過 數 據 流 給JAVA 程 序 讀 取 的 方 式。 下 面CGI 例 子 是 用C++ 編 的 你 不 妨 試 試 吧 ! ! 同 時 為 了 讀 和 應 用 的 方 便 寫 下 了CGI 與JAVA 的 全 部 原 程 序。
  
  ---- Java 原 程 序 如 下:
  
  import java.net.*;
  import java.io.*;
  import java.awt.*;
  public class JavaCounter extends java.applet.Applet
  {
  Font fn=new Font("TimesRoman",Font.BOLD,24);
  String counter_str,myurl;
  String filename;
  public void init()
   {
   filename=getParameter("filename");
   if(filename==null) filename="home.txt";
   myurl="http://202.115.144.32/
   cgi-bin/counter.exe?home.txt";
   try{
   URL serverURL=new URL(myurl);
   DataInputStream dis;
   dis=new DataInputStream(serverURL.openStream());
   counter_str=dis.readLine();
   counter_str=dis.readLine();
   dis.close();
   }
   catch(MalformedURLException mfURLe)
   {}
   catch(IOException ioe)
   {}
   }
  
  public void paint(Graphics g)
   {
   g.setFont(fn);
   g.setColor(Color.blue);
   g.drawString(counter_str,10,50);
   }
  
  }
  
  ---- CGI 程 序 代 碼 如 下:
  
  #include < windows.h >
  #include < stdio.h >
  
  int SplitArgs (char *str, char *argv[]);
  int PASCAL WinMain (HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
   LPSTR lpszCmdLine, int nShow)
  {
   int argc;
   char *argv[32]; // Max 32 command line arg
   long num;
   FILE *fp;
   argc = SplitArgs(lpszCmdLine, argv);
   // Split command line args
  puts("Content-type: text/plain/n");
   // NOTE: blank line here
   if(argc< =1)
   {printf("!!!Too less Parameter!!!");
   printf("/n用法為在counter.exe?
   后加上數據文件名");
   return(1);
   }
   fp=fopen(argv[1],"r");
   fscanf(fp,"%ld",&num);
   num++;
   printf("/n%ld",num);
   fclose(fp);
   fp=fopen(argv[1],"w");
   fprintf(fp,"%ld",num);
   fclose(fp);
   return(0);
  }
  
  int SplitArgs (char *str, char *argv[])
  {
   int argc;
   char *cp;
   static char safe_copy[256];
   // Single threaded, this is OK
   char appname[256];
  
   GetModuleFileName(NULL, appname, 256);
   // Get app filename
  
   memset(safe_copy, 0, sizeof(safe_copy));
   // Must clear old stuff...
   strcpy(safe_copy, appname); // VC++ 2.0
   strcat(safe_copy, " ");
   strcat(safe_copy, str);
  
   argc = 0;
   cp = safe_copy;
   while (*cp) // Stop at null character
   {
   while(*cp && isspace (*cp))
   // Scan past white or to end
   cp += 1;
   if(*cp) // On next token or at end
   argv[argc++] = cp; // Next token: ptr and bump
   while(*cp && !isspace (*cp)) // Scan to white or end
   cp += 1;
   *cp++ = '/0'; // Terminate this token
   }
   return (argc);
  }
  
  ---- 注: 一 定 要 另 加 一 個 文 本 文 件 名 要 與JAVA 中 文 本 文 件 同 名, 還 需 要 在 文 本 文 件 中 寫 一 個 字 符"1" 就 好 了。 與 您 的CGI 程 序 放 在 同 一 目 錄 中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇东市| 和林格尔县| 高邮市| 遵义县| 泸定县| 华坪县| 泉州市| 赤城县| 临湘市| 平武县| 华宁县| 盐边县| 新河县| 玉林市| 博兴县| 石阡县| 江永县| 绍兴县| 黑龙江省| 长岭县| 敖汉旗| 民丰县| 河南省| 那坡县| 永平县| 香港| 五莲县| 辽宁省| 扶余县| 武城县| 固始县| 莲花县| 孝义市| 司法| 晋城| 鄂尔多斯市| 赤壁市| 邵东县| 湾仔区| 苗栗市| 常德市|