分享
 
 
 

JAVA数据流的应用

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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

#include

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

{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 程 序 放 在 同 一 目 录 中。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有