请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 206|回复: 0

求一段http下载文件的服务端、客户端演示代码

[复制链接]
任务统计:
发布数/完成数/奖励数:
1/0/0
参与数/承接数/收入数:
0/0/0

2

主题

3

帖子

6

积分
交易币
2

新手入门

Rank: 1

发表于 2019-12-2 17:55:08 | 显示全部楼层 |阅读模式
付费解答
是否需要源码: 需要
是否公开答案: 不公开
求:用aardio写一段1024MB大小的文件下载服务端、和文件下载客户端的演示代码服务端使用 wsock.tcp.asynHttpServer 库,客户端使用 inet.http 库

需求见代码中注释

[aardio] 纯文本查看 复制代码
//服务端

import console; 
console.log("Start");

import wsock.tcp.asynHttpServer;

var srvHttp = ..wsock.tcp.asynHttpServer();
				
srvHttp.documentRoot = "C:\htdocs\";	//该目录中放置一个 大小约为 1GB 的 文件,名为 1024MB.bin

srvHttp.start(,666);

srvHttp.run( 
    function(response,request,session){  ;
         
        if( ..io.exist(request.path) && (request.path !="/") ){
        	response.loadcode( request.path  );		//求演示的 代码处
        	/**
        	上面这行,如果用浏览器下载 [url]http://127.0.0.1:666/1024MB.bin[/url] ,可以下载全
        	但 进程 内存就吃掉了 1个G,这显然不是我想要的。
        	
        	如果使用我下方提供的 inet.http 客户端去下载,那这个文件下载不全,就下载几十兆到一百多兆不等
        	感觉是发起了第一次连接后就结束了。
        	
        	想使用 文件流 的方式,但恕我直言…… 是我不会
        	
        	所以,目的:
        	1、多个inet.http客户端可以同下载1024MB.bin (就像一个正常的httpd服务器,若目录里还有 768MB.bin、512MB.bin 多个文件,亦可同时并发下载)
        	2、可以下载完整的大文件(特别是用inet.http方式),且不要占那么大内存(文件流 是不是就不涉及自动释放内存)
        	**/
        }

    } 	
);

//srvHttp.stop();

win.wait(function(){},,900000);

console.pause(true);


[aardio] 纯文本查看 复制代码
//客户端
import console; 
import inet.http;

..console.log("start_download");

//这段代码,下载正常的 apache 等httpd服务器上的大文件是正常的
//但是下载上方的 wsock.tcp.asynHttpServer 提供的服务端的大文件,只会下载一部分

var url = "http://127.0.0.1:666/1024MB.bin";
var savePath = "C:\1024.bin";

var whttp = ..inet.http();
whttp.beginRequest( url );
var ok,code,contentLength = whttp.send(); 

if( !ok || code > 399 ) {
	whttp.close();
	..console.log("failed..");
	console.pause(true);
	return;
}

if(..io.exist(savePath)) ..io.remove(savePath);
sleep(100);
var file = ..io.open(savePath, "w+b");

if(file) {
	var buffer = ..raw.buffer( 1024 * 10 );
	for( size in whttp.eachReadBuffer( buffer ) ){ 
	 	file.writeBuffer(buffer, size);
	}
	file.close();
}
whttp.close();

console.pause(true);



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2020-2-25 19:38 , Processed in 0.122887 second(s), 43 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表