`
menglinxi
  • 浏览: 20471 次
  • 性别: 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的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理方面的实践。 1. **Mina的高级使用** Mina的核心在于其异步事件驱动的模型,这使得它在处理大量并发连接时表现出色。...

    mina文件传输

    综上所述,Mina文件及字符串传输是一个典型的网络通信应用案例,它展示了如何使用Mina框架高效地处理文件请求和响应,以及如何在客户端和服务端之间进行安全的数据传输。通过学习和掌握这些知识,开发者可以构建出...

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

    本案例将深入探讨如何使用Mina作为服务端,结合Socket客户端实现文件的传输。 一、Apache Mina框架介绍 Apache Mina,全称为“Minimalist Application Networking Abstraction”,是一个提供了统一的API来处理多种...

    mina 集成spring 传输文件和文本

    **描述解读:**"用一个监听既可以传文件又可以传文本" 这里的描述表明我们将构建一个监听器,该监听器能够同时处理文件和文本数据的发送与接收。这意味着我们需要设计一个灵活的协议,能够在同一连接上区分不同类型...

    Mina文件及字符串传输

    标题中的"Mina文件及字符串传输"指的是使用Apache Mina框架进行数据交互的过程,包括发送和接收字符串请求以及传输文件。这一过程通常涉及到网络编程中的TCP/IP协议,因为Mina支持基于TCP的传输层通信。 首先,让...

    mina 上传文件和文件名

    本文将围绕"MINA上传文件和文件名"这一主题,深入探讨MINA的核心特性、文件上传的实现机制以及如何处理文件名。 MINA的核心特性包括非阻塞I/O、事件驱动的架构、多线程模型和丰富的缓冲区管理。非阻塞I/O使得MINA...

    Mina上传文件

    3. **数据传输**: 使用NIO的`SocketChannel`,客户端将编码后的数据发送到服务器端的`ServerSocketChannel`。 4. **数据解码**: 服务器端的`FileDecoder`接收数据,根据预定义的协议解码为文件块,并存储在临时位置...

    mina 上传文件

    4. **数据传输**: 文件数据被分块并通过网络传输,Mina的Filter链在此过程中进行数据的编码和解码。同时,Handler监听Read事件,逐块接收文件内容。 5. **保存文件**: 服务器端Handler接收到每个数据块后,将其累积...

    给予mina 协议进行大数据传输

    在压缩包子文件的文件名“M2M”中,通常M2M代表Machine-to-Machine通信,这可能是指使用MINA来实现设备之间的数据交换,例如在物联网(IoT)环境中。MINA的灵活性和可扩展性使得它适合于处理各种设备间的通信需求,...

    mina传输对象的示例

    在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...

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

    **基于Mina的开源文件传输软件** Mina(Minimum Asynchronous Network)是一个高度可扩展的、高性能的网络应用开发框架,主要用于构建网络服务,如FTP(文件传输协议)服务器。这个开源项目允许开发者使用Java NIO...

    Mina网络通信传输

    在"实现了Mina框架简单的换行符编解码的服务器客户端通信"这一描述中,我们可以理解到项目使用了Mina提供的编码器和解码器机制。换行符编码器通常用于将包含换行符的数据转换为网络传输友好的格式,因为网络协议中...

    MINA_API+MINA_DOC+mina

    同时,MINA支持多种协议,如TCP、UDP、SSL/TLS等,使得它在各种网络通信场景下都具有广泛的应用性,如聊天服务器、文件传输服务、在线游戏服务器等。 总的来说,这个压缩包为初学者提供了一套完整的MINA学习资源,...

    最新 mina框架jar包以及资源文件

    3. **过滤器链**:MINA 使用过滤器链的概念,数据在传输过程中会经过一系列过滤器进行预处理和后处理,这为添加日志、编码解码、安全性检查等功能提供了便利。 4. **协议支持**:MINA 支持多种协议,如HTTP、FTP、...

    mina连接 mina心跳连接 mina断线重连

    在提供的文件"minaConnect"中,可能包含了使用Mina实现上述功能的相关代码示例和配置。通过分析这些文件,可以更具体地了解如何在实际项目中应用Mina的连接、心跳和断线重连机制。不过,具体的实现细节和优化策略需...

    mina.zip内涵所有mina所需jar包

    在使用过程中,你可以利用Mina提供的API来建立服务器,处理客户端连接,定义协议处理逻辑,以及进行数据传输。 总的来说,这个"mina.zip"是一个方便开发和测试Apache Mina应用的资源包,包含了运行Mina所需的所有...

    websocket+java服务器(mina)

    Mina(Java Multithreaded Network Application Framework)是一个用Java编写的网络应用框架,它提供了高度可扩展性和性能,适用于多种网络协议,包括TCP和UDP。Mina为开发者提供了一种抽象层,简化了网络编程的复杂...

    mina传递图片实例

    为了优化性能,可以考虑对数据进行压缩,如使用Gzip压缩,减少网络传输的数据量。此外,为了保证图片数据的完整性和一致性,可以采用TCP协议,利用其可靠的数据传输特性。 在实际应用中,可能还需要处理更多复杂...

    apache-mina-2.1.3所有jar和源文件.7z

    3. **Mina Transport**:实现了各种网络传输层,如TCP、UDP、本地文件系统以及NIO(非阻塞I/O)。 4. **Mina Extras**:可能包含一些额外的模块或工具,用于简化特定任务,如SSL/TLS支持、协议解析等。 5. **...

    springboot 深度整合mina开箱即用

    要将Spring Boot与Mina整合,首先我们需要在`pom.xml`文件中添加Mina和Spring Boot的相关依赖。接着,在Spring Boot应用中创建一个Mina服务器,这通常涉及以下步骤: - **创建Mina配置类**:定义Mina服务器的配置,...

Global site tag (gtag.js) - Google Analytics