package server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import com.FileRequest;
import com.FileResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* 文件传输服务端业务处理类
* @author wuzongan
* @version 1.0
* @created 2011-3-14 下午06:36:55
*/
public class FileServerIoHandler extends IoHandlerAdapter {
/*服务端接收到的文件名*/
private String fileName ;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
private static Logger LOGGER = LoggerFactory.getLogger(FileServerIoHandler.class);
public void sessionOpened(IoSession session) throws Exception {
}
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
LOGGER.warn(cause.getMessage(), cause);
}
/**
* 服务端接收类
* @param session
* @param message
* @throws Exception
* @see org.apache.mina.core.service.IoHandlerAdapter#messageReceived(org.apache.mina.core.session.IoSession, java.lang.Object)
*/
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
FileRequest fr = (FileRequest) message;
System.out.println("服务端接收到数据:"+fr.getFileName());
setFileName(fr.getFileName());
fileName = "F:\\"+fileName;
FileInputStream fis = null;
try{
fis = new FileInputStream(fileName);
}catch(FileNotFoundException e){
System.out.println("请求文件不存在");
/*FileResponse frs = new FileResponse(null, "请求文件不存在");
session.write(frs);*/
//session.write("请求文件不存在");
}
ByteBuffer bf = getFileContents(fis);
FileResponse frs = new FileResponse(bf, null);
session.write(frs);
}
/**
* 根据文件流得到文件的ByteBuffer
* @param fis
* @return
* @throws IOException
*/
public ByteBuffer getFileContents(FileInputStream fis) throws IOException{
// 得到文件通道
FileChannel fc = fis.getChannel();
// 指定大小为 20MB的缓冲区
ByteBuffer bf = ByteBuffer.allocate(1024*1000*20);
while (fc.read(bf) != -1)
{
//把缓冲中当前位置回复为零,前把缓冲区的 limit 设置为之前 position 值
bf.flip();
// 输出缓冲区中的内容
while (bf.hasRemaining())
{
bf.get();
//System.out.print((char) bf.get());
}
break;
// 清理缓冲区,准备再次读取数据
//bf.clear();
}
return bf;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Mina文件及字符串传输
共25个文件
java:11个
class:11个
prefs:1个
4星 · 超过85%的资源 需积分: 9 19 下载量 83 浏览量
2011-07-20
15:00:05
上传
评论
收藏 24KB RAR 举报
温馨提示
Mina文件及字符串传输 客户端发送字符串请求。服务端返回客户端请求的文件
资源推荐
资源详情
资源评论
收起资源包目录
Mina文件及字符串传输.rar (25个子文件)
Mina文件及字符串传输
MinaTest3
src
client
FileClientIoHandler.java 2KB
FileClient.java 2KB
com
FileResponse.java 750B
FileRequest.java 707B
server
FileServer.java 2KB
FileServerIoHandler.java 3KB
codec
FileCodecFactory.java 1KB
FileRequestDecoder.java 1KB
FileRequestEncoder.java 1KB
FileResponseDecoder.java 980B
FileResponseEncoder.java 928B
bin
client
FileClientIoHandler.class 2KB
FileClient.class 3KB
com
FileResponse.class 962B
FileRequest.class 931B
server
FileServerIoHandler.class 3KB
FileServer.class 2KB
codec
FileRequestEncoder.class 2KB
FileResponseDecoder.class 1KB
FileCodecFactory.class 1KB
FileRequestDecoder.class 2KB
FileResponseEncoder.class 2KB
.classpath 632B
.settings
org.eclipse.jdt.core.prefs 629B
.project 385B
共 25 条
- 1
资源评论
- WilbertHome2014-11-16资料挺好的
junzhengdi
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功