`
menglinxi
  • 浏览: 20203 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

用mina传输文件

阅读更多
  1. package com.rose.common.frame.mina;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.BufferedOutputStream;   
  5. import java.io.IOException;   
  6. import java.io.InputStream;   
  7. import java.io.OutputStream;   
  8.   
  9. /**  
  10.  * 用于mina 服务器上传下载  
  11.  * 流处理线程公共类  
  12.  * @author rose  
  13.  *  
  14.  */  
  15. public class IoStreamThreadWork extends Thread{   
  16.     public static final int BUFFER_SIZE = 1024*2;   
  17.        
  18.     private BufferedInputStream bis;   
  19.     private BufferedOutputStream bos;   
  20.        
  21.        
  22.     public BufferedInputStream getBis() {   
  23.         return bis;   
  24.     }   
  25.   
  26.     public void setBis(BufferedInputStream bis) {   
  27.         this.bis = bis;   
  28.     }   
  29.   
  30.     public BufferedOutputStream getBos() {   
  31.         return bos;   
  32.     }   
  33.   
  34.     public void setBos(BufferedOutputStream bos) {   
  35.         this.bos = bos;   
  36.     }   
  37.   
  38.     public IoStreamThreadWork(InputStream in, OutputStream os){   
  39.         bis = new BufferedInputStream(in);   
  40.         bos = new BufferedOutputStream(os);   
  41.     }   
  42.     public synchronized void run() {   
  43.         byte[] bufferByte = new byte[BUFFER_SIZE];   
  44.         int tempData = 0;   
  45.         try {   
  46.             while((tempData = bis.read(bufferByte)) != -1 ){   
  47.                 bos.write(bufferByte, 0, tempData);   
  48.             }   
  49.             try {   
  50.                 bos.flush();   
  51.             } catch (IOException e) {   
  52.                 e.printStackTrace();   
  53.             }   
  54.         } catch (IOException e) {   
  55.             e.printStackTrace();   
  56.         }finally{   
  57.             try {   
  58.                 bos.close();   
  59.                 bis.close();   
  60.             } catch (IOException e) {   
  61.                 e.printStackTrace();   
  62.             }   
  63.         }   
  64.     }   
  65. }  

服务端:

  1. package com.rose.common.frame.mina;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileNotFoundException;   
  5. import java.io.FileOutputStream;   
  6. import java.io.IOException;   
  7. import java.io.InputStream;   
  8. import java.io.OutputStream;   
  9. import java.net.InetSocketAddress;   
  10. import java.util.concurrent.ArrayBlockingQueue;   
  11. import java.util.concurrent.ThreadPoolExecutor;   
  12. import java.util.concurrent.TimeUnit;   
  13.   
  14. import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;   
  15. import org.apache.mina.core.session.IoSession;   
  16. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;   
  17. import org.apache.mina.filter.logging.LoggingFilter;   
  18. import org.apache.mina.handler.stream.StreamIoHandler;   
  19. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;   
  20.   
  21. /**  
  22.  * @author rose  
  23.  * 文件传输服务器  
  24.  */  
  25. public class MinaFileServer extends StreamIoHandler{   
  26.     public static final int PORT = 8888;   
  27.     @Override  
  28.     public void sessionOpened(IoSession session) {   
  29.         System.out.println("客户端连接了:"+session.getRemoteAddress());   
  30.         super.sessionOpened(session);   
  31.     }   
  32.   
  33.     protected void processStreamIo(IoSession session, InputStream in,OutputStream out) {   
  34.         //设定一个线程池   
  35.         //参数说明:最少数量3,最大数量6 空闲时间 3秒   
  36.         ThreadPoolExecutor threadPool = new ThreadPoolExecutor(363,TimeUnit.SECONDS,    
  37.                 //缓冲队列为3   
  38.                 new ArrayBlockingQueue<Runnable>(3),   
  39.                 //抛弃旧的任务   
  40.                 new ThreadPoolExecutor.DiscardOldestPolicy());   
  41.         FileOutputStream fos = null;   
  42.                    //此处路径如何动态设定。   
  43.         File receiveFile = new File("e:\\test.pdf");   
  44.   
  45.         try {   
  46.             fos = new FileOutputStream(receiveFile);   
  47.         } catch (FileNotFoundException e1) {   
  48.             e1.printStackTrace();   
  49.         }   
  50.         //将线程放入线程池 当连接很多时候可以通过线程池处理   
  51.         threadPool.execute(new IoStreamThreadWork(in,fos));   
  52.         //直接启动线程 连接很少可以选用下面   
  53. //      new IoStreamThreadWork(in,fos).start();   
  54.     }   
  55.        
  56.     public void createServerStream(){   
  57.         //建立一个无阻塞服务端socket 用nio   
  58.         NioSocketAcceptor acceptor = new NioSocketAcceptor();   
  59.         //创建接收过滤器 也就是你要传送对象的类型   
  60.         DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();   
  61.         //===========过滤器创建好了就开始设定============   
  62.            
  63.         //设定 对象传输工厂   
  64.         ObjectSerializationCodecFactory factory = new ObjectSerializationCodecFactory();   
  65.         //设定传输最大值   
  66.         factory.setDecoderMaxObjectSize(Integer.MAX_VALUE);// 设定后服务器可以接收大数据   
  67.         factory.setEncoderMaxObjectSize(Integer.MAX_VALUE);   
  68.         chain.addLast("logging"new LoggingFilter());//这个用于打印日志 可以不写   
  69.         //设定服务端消息处理器   
  70.         acceptor.setHandler(new MinaFileServer());   
  71.         InetSocketAddress inetSocketAddress = null;   
  72.         try {   
  73.             inetSocketAddress = new InetSocketAddress(8888);   
  74.             acceptor.bind(inetSocketAddress);   
  75.         } catch (IOException e) {   
  76.             // TODO Auto-generated catch block   
  77.             e.printStackTrace();   
  78.         }   
  79.         System.out.println("文件服务器已经开启:"+8888);   
  80.     }   
  81.     public static void main(String[] args) {   
  82.         MinaFileServer server = new MinaFileServer();   
  83.         server.createServerStream();   
  84.     }   
  85. }  

客户端:

  1. package com.rose.common.frame.mina;   
  2.   
  3. import java.io.File;   
  4. import java.io.FileInputStream;   
  5. import java.io.FileNotFoundException;   
  6. import java.io.InputStream;   
  7. import java.io.OutputStream;   
  8. import java.net.InetSocketAddress;   
  9.   
  10. import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;   
  11. import org.apache.mina.core.future.ConnectFuture;   
  12. import org.apache.mina.core.session.IoSession;   
  13. import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;   
  14. import org.apache.mina.filter.logging.LoggingFilter;   
  15. import org.apache.mina.handler.stream.StreamIoHandler;   
  16. import org.apache.mina.transport.socket.nio.NioSocketConnector;   
  17.   
  18.   
  19. /**  
  20.  * @author rose  
  21.  * 文件传输客户端   
  22.  */  
  23. public class MinaFileClient extends StreamIoHandler{   
  24.     IoSession session;   
  25.     public void setSession(IoSession session) {   
  26.         this.session = session;   
  27.     }   
  28.     public IoSession getSession() {   
  29.         return session;     
  30.     }   
  31.     @Override  
  32.     protected void processStreamIo(IoSession session, InputStream in,   
  33.             OutputStream out) {   
  34.         //客户端发送文件   
  35.             File sendFile = new File("F:\\ttt.pdf");   
  36.             FileInputStream fis = null;   
  37.             try {   
  38.                 fis = new FileInputStream(sendFile);   
  39.                    
  40.             } catch (FileNotFoundException e) {   
  41.                 e.printStackTrace();   
  42.             }   
  43.             //放入线程让其执行   
  44.              //客户端一般都用一个线程实现即可 不用线程池   
  45.             new IoStreamThreadWork(fis,out).start();   
  46.             return;   
  47.     }   
  48.        
  49.     public void createClienStream(){   
  50.         int port = 8888;   
  51.         String local = "127.0.0.1";   
  52.            
  53.         NioSocketConnector connector = new NioSocketConnector();   
  54.         DefaultIoFilterChainBuilder chain = connector.getFilterChain();   
  55.         ObjectSerializationCodecFactory factory = new ObjectSerializationCodecFactory();   
  56.         factory.setDecoderMaxObjectSize(Integer.MAX_VALUE);   
  57.         factory.setEncoderMaxObjectSize(Integer.MAX_VALUE);   
  58.         chain.addLast("logging"new LoggingFilter());//用于打印日志可以不写   
  59.         connector.setHandler(new MinaFileClient());   
  60.         ConnectFuture connectFuture = connector.connect(new InetSocketAddress(local,port));   
  61.         connectFuture.awaitUninterruptibly();//写上这句为了得到下面的session 意思是等待连接创建完成 让创建连接由异步变同步   
  62.         //后来表明我开始的想法不行 动态依旧不能做到   
  63. //      @SuppressWarnings("unused")   
  64. //      IoSession session = connectFuture.getSession();   
  65. //      setSession(session);   
  66.     }   
  67.     public static void main(String[] args) {   
  68.         MinaFileClient client = new MinaFileClient();   
  69.         client.createClienStream();   
  70.     }   
  71. }  

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    mina的高级使用,mina文件图片传送,

    mina文件传输

    Mina文件及字符串传输 客户端发送字符串请求。服务端返回客户端请求的文件

    mina 集成spring 传输文件和文本

    用一个监听既可以传文件又可以传文本 mina 集成spring 传输文件和文本

    mina传文件案例,客户端加服务端

    minafileserver(Socket客户端+Mina服务端传文件)

    mina 上传文件

    用mina进行文件传输

    Mina文件及字符串传输

    Mina文件及字符串传输 客户端发送字符串请求。服务端返回客户端请求的文件

    基于mina的开源文件传输软件

    基于mina的开源ftp文件传输软件,有很好的NIO支持。

    Mina框架实战(由浅入深,稳扎稳打)

    (4)Client发送功能ID,根据功能ID、Client_ID映射文件得到Client_ID,Client_ID配置到启动参数。 (5)连接失去时,更新角色和Session的Map。 test3.type1对应test3(1) test3.type2对应test3(2) 待做: ...

    基于.NET的轻量级高性能网络程序框架Mina.NET设计源码

    本资源提供了一套基于.NET的轻量...这些文件详细展示了如何使用C#构建一个支持TCP、UDP和串口等多种传输通道的网络程序框架,该框架能够帮助开发者快速地开发高伸缩性的应用程序,非常适合用于学习和参考C#项目的开发。

    MINA/JAVA游戏服务端源码

    说明:该服务器框架试用于需要频繁修改数据库内容的游戏,没有使用数据库缓存,jdbc直接修改数据库内容。 申明: 我是个新手,有出错的地方莫怪哈,把源码发布出来更多的是想大伙帮忙改进下框架,改进的代码和新...

    apache-mina 即时通信框架,加入SSH和android包

    这个框架协议自己定义(即:底层已有字符串传输或Object传输,自己可以定义字符串会对象进行解析来制定自己的协议) 语音、图片等其实也是上传文件服务器再连个即时通信字符串通信而已; 注意:SSH-lib里有注意...

    新手入门选修教程:小程序的框架及逻辑层

    MINA提供了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。   文件结构 框架程序包含一个描述整体...

    JAVA上百实例源码以及开源项目

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    Apache Ftpserver

    使用MINA,FtpServer可以扩展到大量并发用户。 特性 1、100%纯Java,免费的开源可恢复FTP服务器 2、多平台支持和多线程设计。 3、用户虚拟目录,写入权限,空闲超时和上传/下载带宽限制支持。 4、匿名登录支持...

    JAVA上百实例源码以及开源项目源代码

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    Android即时聊天客户端实现

    在下的毕业设计,Android即时聊天系统,客户端,使用socket及其框架mina来传输即时信息(json),okhttp3来处理文件相关信息

    即时聊天系统服务器端

    在下的毕业设计,Android即时聊天系统,服务器端,使用socket及其框架mina来传输即时信息(json),okhttp3来处理文件相关信息 自动涨分 一分护体

    camel项目实例

    Apache Camel 采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,其中包含的模块有 HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF Bus API。 这些模块是采用可插拔的方式进行工作的。Apache...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics