nio 文件服务器,NIO Http文件服务器 - 连接过早关闭

我想创建一个使用Java NIO的HTTP静态文件服务器,它适用于小文件,但似乎会截断较大文件的HTTP响应(3.8 MB图像中有672 KB根据我的Chrome Inspector返回,并且我的浏览器显示部分损坏的图像)。这段代码是否错误?NIO Http文件服务器 - 连接过早关闭

(我知道这是你现有的库,最终我将使用一个在我的项目,但最初我想实现一个基本的自己,看看我的项目的概念是可行的。)

Iterator keys = selector.selectedKeys().iterator();

while (keys.hasNext()) {

SelectionKey key = keys.next();

keys.remove();

if (key.isAcceptable()) {

// New Client encountered

serverSocket.accept().configureBlocking(false)

.register(selector, SelectionKey.OP_READ);

} else if (key.isReadable()) {

// Additional data for existing client encountered

SocketChannel selectedClient = (SocketChannel) key.channel();

ByteBuffer buffer = ByteBuffer.allocate(548);

String requestedFile2 = getRequstedFile(key, selectedClient, buffer);

buffer.clear();

buffer.flip();

FileChannel fc = FileChannel.open(Paths.get(requestedFile2));

String string = "HTTP/1.1 200 Ok\nContent-Type: image/jpeg\nContent-Length: "

+ (Files.size(Paths.get(requestedFile2)) + "\n\n");

selectedClient.write(ByteBuffer.wrap(string.getBytes()));

while (fc.read(buffer) > -1) {

buffer.flip(); // read from the buffer

selectedClient.write(buffer);

buffer.clear();

}

selectedClient.close();

}

}

(异常处理等为简洁起见省略)

EDIT

我有一个内容长度失配错误消息。那么,使用NIO API读取文件内容时,确定HTTP响应大小的正确方法是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值