Topic: 用 NIO 在两台 PC 间传送文件的问题

  Print this page

1.用 NIO 在两台 PC 间传送文件的问题 Copy to clipboard
Posted by: ant21
Posted on: 2005-05-08 21:48

如果在文件发送方将文件一次性映射到内存(还是应该切分为更小的块?),然后用 SocketChannel 发送,像这样:

buff = fileChannel.map(FileChannel.MapMode.READ_ONLY, range, size);
int send = socketChannel.write(buff);

这时候如何才能知道接收方的接收进度呢?因为如果没有特殊情况发生的话,send 的值只是 buff 的大小。如果想要用一个进度条在发送方显示文件传送进度的话,进度值(也就是接收方实际接收到的字节数)该怎么样获得呢?难道需要每次向接收方查询?

谢谢!

2.Re:用 NIO 在两台 PC 间传送文件的问题 [Re: ant21] Copy to clipboard
Posted by: henryevol
Posted on: 2005-06-04 16:05

对于阻塞式的Channel连接,
socketChannel.write(buff); 直到写完了,才会返回
而对于非阻塞式的连接 可能写完了返回,也可以写了一点之后就有返回
返回值为 已发送的数值
下面函数是对非阻塞通道进行的阻塞式调用!
可以参考

public static void channelWrite(SocketChannel channel, ByteBuffer writeBuffer,
long sleepInterval) throws
IOException {
long nbytes = 0;
long toWrite = writeBuffer.remaining();
try {
while (nbytes != toWrite) {
nbytes += channel.write(writeBuffer);
try {
Thread.sleep(sleepInterval);
} catch (InterruptedException e) {}
}
}
finally {
writeBuffer.rewind();
}
}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923