请教各位applet与servlet通信的一个技术难题(100分相送!!!!!!)

temphan 2002-04-15 09:24:00
通过浏览器的applet,控制本地的一个servlet到远程服务器去下载多个文件。现在需要使applet和servlet能够保持实时连接,以便在浏览器动态的显示文件下载的百分比。

我想servlet下载的过程中,每下载一定的字节就在输出流中记录一下,applet中写一个线程,每隔固定的时间从输入流中读取一下文件的状态。
但是我对java的i/o流不太熟悉,是否servlet每次写输出流,就会将上次的输出覆盖?如果是这样的话,客户机和服务器也状态就很难保持一致。特别是时间间隔内正好有一个文件结束,另一个文件开始。

想请教各位还有什么别的方法吗,复杂一些也没有什么关系的。
谢谢!!!!!!!!!!!!!!!!!!!!!!!!
...全文
3 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
temphan 2002-04-16
还有什么别的意见吗?等待中!!!!!!!!!!!!
回复
temphan 2002-04-16
temphan@sohu.com 谢谢先!magicjohn(默克)

gularess() ,如果传送过程中出现异常情况怎么办?

还有其他的想法吗,凡是回复的都给分。不够再加个几百分好了!
回复
MagicJohn 2002-04-16
如果是下载多个文件,把文件名和字节长度放在数组里,然后一个一个下载文件,用bar条显示下载的百分比。

给个mail adress,我给你一个class 参照。
回复
haichuang 2002-04-16
制定一个简单的协议,例如指定一个字符'#'做为一个文件的百分之一,你的servlet每下载文件百分之一就输出一个'#'号,你的applet收到一个'#'号就将进度条加1,另外再规定一个文件下载完后再输出一个'$'符号,applet收到'$'符号就从0开始记数.这样不就实现了你的功能.其实还可以扩展成可以告诉applet有关文件的各种信息,让你的applet看起来更美.只要你规定好协议好可.另外java中的stream流中读字节是阻塞的,所以你无需做线程就可以完成功能.如有不明请向我发信询问:hcx-yz@21cn.com
回复
gularess 2002-04-16
如果在缓冲的范围内是不会覆盖的。
我想applet的线程可以不停的读取servlet的输出流,有文件结束标记就改变状态重绘。大概这样
applet:

public void init() {
//建立一个与servlet的connection,手头没有代码,又记不住,大概new Connect(new URL(),servlet名称);
...

InputStream input = con.getInputStream();
int data=input.read();
while(data!=全部结束的标记) {
if(data == 一个文件的标记) {
....
}
}
}
仅供参考!
回复
你看是不是可以按读出字节进行计数。applet在一个DataInputStream中,用while循环,read(),读一个字节,每读一个或几个后进行纪录状态的表示。
回复
temphan 2002-04-15
不会吧,没人知道吗?为什么没人理我!!!
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告