aardio 文档
aardio 范例: 异步非阻塞客户端
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=660;bottom=381)
winform.add(
edit={cls="edit";left=19;top=14;right=641;bottom=363;edge=1;multiline=1;z=1}
)
/*}}*/
import wsock.tcp.asynClient;
var tcpClient = wsock.tcp.asynClient();
var file = io.file("/test.zip","w+b");//注意 io.file 默认是文本方式写入的,b指定二进制模式
/*
recv,recvBuffer函数与 read前缀的读数据函数有所区别,
recv不保证每次一定会读完数据,所以在onClose事件里要一直读到没有任何数据。
onReceive里不能多次调用recv,如果希望每次都把接收缓冲区中的数据读完,
请在 onRead事件中调用read前缀的系列函数接收数据。
*/
var buffer = raw.buffer(0x100000);
tcpClient.onReceive = function(err){
var readSize = tcpClient.recvBuffer(buffer);
if( readSize ) {
file.writeBuffer(buffer,readSize);
winform.edit.log("已下载",math.size64( file.seek() ).format(),'\r\n')
}
}
//如果用recv,recvBuffer函数收取数据,必须在onClose事件中继续收取最后的数据
tcpClient.onClose = function(err){
for(readSize,remainSize in tcpClient.eachReadBuffer(buffer) ){
file.writeBuffer(buffer,readSize);
winform.edit.log("已下载",math.size64( file.seek() ).format(),'\r\n')
}
winform.edit.log("服务端已断开",err);
}
tcpClient.connect("127.0.0.1",7510) //因为是异步套接字,这里不需要检查返回值
winform.show();
win.loopMessage();
Markdown 格式