Mina2.0的上传文件时如何实现的 请各位大侠指导下

qyhdt 发布于 2009/11/23 16:16
阅读 3K+
收藏 0

譬如我A主机要传输一个 teacher.rmvb文件 去 B主机 B是服务端请问这个代码如何能写呢 谢谢各位大侠了

我的邮箱qyhdt@sina.com

还有就是在传输对象过程中 我设定了

factory.setDecoderMaxLineLength(Integer.MAX_VALUE);

factory.setEncodeMaxLineLength(Integer.MAX_VALUE);

有时候还是报异常 bufferdateexception 这个事怎么回事呢

谢谢各位阅读了 最近弄这个弄的好辛苦啊

加载中
0
JavaGG
JavaGG

public class RmvbHandler implements IoHandler{

public void messageReceived(IoSession session, Object message)
   throws Exception {

//不里不停的接收message,把他加到一个流中,再把这个流放到session,下次写时就拿这个流出来,再把数椐写进去

//一直到调用sessionClosed就把流拿出来,这样就成了

}

}

如果你一个socket要发送多个文件,那么就必需要解释rmvb文件格式了,起码得知道文件大小

0
q
qyhdt

引用来自“JavaGG”的帖子

 

public class RmvbHandler implements IoHandler{

public void messageReceived(IoSession session, Object message)
   throws Exception {

//不里不停的接收message,把他加到一个流中,再把这个流放到session,下次写时就拿这个流出来,再把数椐写进去

//一直到调用sessionClosed就把流拿出来,这样就成了

}

}

如果你一个socket要发送多个文件,那么就必需要解释rmvb文件格式了,起码得知道文件大小

我两台机器都是用的mina框架 我看StreamIoHandler不是可以么 关键就是我不太会这个类

能否讲解下 如果能有个完整的代码 不甚感激 可以发至我的邮箱里面 qyhdt@sina.com

0
王全
王全

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

0
q
qyhdt

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

 StreamIoHandler 它的发送和接受的回调机制是什么

哪个方法负责发送 哪个方法负责接受的呢

0
王全
王全

引用来自“qyhdt”的帖子

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

 StreamIoHandler 它的发送和接受的回调机制是什么

哪个方法负责发送 哪个方法负责接受的呢

你 这个问题让我很无语!

0
q
qyhdt

引用来自“王全”的帖子

引用来自“qyhdt”的帖子

引用来自“王全”的帖子

可以使用StreamIoHandler,这个handler主要是支持stream的.

直接实现它的processStreamIo method

客户端使用IoSessionOutputStream write,

服务端使用IoSessionInputStream read!

和本地的io流读写大同小异!

 StreamIoHandler 它的发送和接受的回调机制是什么

哪个方法负责发送 哪个方法负责接受的呢

你 这个问题让我很无语!

 唉 我是不会才问的啊 会的话就不问了啊

有这个回答的机会给我个答案呗

0
q
qyhdt

我已经解决了 谢谢大家

0
DEC_LIU
DEC_LIU

请看这个例子:

mina的 StreamIoHandler

文章分类:Java编程

        最近看上了mina,其性能多多,完全不用说了。。,本来是想搞个file+msg传输的,结果。。被这个handler给 block 了,不知道这个东西扎用。。。按其Iohandler interface implement methods+ processStreamIo abstract method   写了一个sample,发现死活发不了包。。。哥怒了。

        没办法,开源的东西还是有好处地,可以深入,下了源码,发现其结构真的很不错,IoService(类似与和customer communication 的一个接口: session )<==IoProcessor(这个好象在code business 的时候没看到,后来才知道是用于处理IoFilter 的)<===IoFilter(*) ,IoHandler(business handler) 。

       原来,StreamIoHandler 的 里面wrap 了两个内部out,in,并且对IoHandler 的每个method 都做了实现,迷底马上揭晓了。。。see the blew:

Java代码
  1. @Override  
  2. public void sessionOpened(IoSession session) {  
  3.     // Set timeouts  
  4.     session.getConfig().setWriteTimeout(writeTimeout);  
  5.     session.getConfig().setIdleTime(IdleStatus.READER_IDLE, readTimeout);  
  6.   
  7.     // Create streams  
  8.     InputStream in = new IoSessionInputStream();  
  9.     OutputStream out = new IoSessionOutputStream(session);  
  10.     session.setAttribute(KEY_IN, in);  
  11.     session.setAttribute(KEY_OUT, out);  
  12.     processStreamIo(session, in, out);  
  13. }  
    @Override
    public void sessionOpened(IoSession session) {
        // Set timeouts
        session.getConfig().setWriteTimeout(writeTimeout);
        session.getConfig().setIdleTime(IdleStatus.READER_IDLE, readTimeout);

        // Create streams
        InputStream in = new IoSessionInputStream();
        OutputStream out = new IoSessionOutputStream(session);
        session.setAttribute(KEY_IN, in);
        session.setAttribute(KEY_OUT, out);
        processStreamIo(session, in, out);
    }

划克,把processStreamIo  template  method 了。。(PS:曾经偶在写portal 里用到过这种pattern)

然后其他的iohandler 的method 里面也全写满了io   logic....最后session closed 才把in ,out stream close .

我想,这样一来应该每传一个文件就回connect 一次了。。

费话说完了。。code ==>

Java代码
返回顶部
顶部