You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-users@mina.apache.org by Edward Scanzano <es...@yahoo.com> on 2009/03/07 19:04:27 UTC

Getting socket exception

Hi,

I have this code

    public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
        ByteArrayOutputStream bos = null;

        try {
            bos = new ByteArrayOutputStream();
            DataConnectionFactory dcf = session.getDataConnection(); 
            DataConnection dc = dcf.openConnection();
            dc.transferFromClient(session, bos);
            
            session.write(new DefaultFtpReply(150, "Data transfer complete."));
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            session.getDataConnection().closeDataConnection();
            if (bos != null) bos.close();
        }
        
        return FtpletResult.SKIP;        
    }

and the line  dc.transferFromClient(session, bos) is throwing this exception

java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at org.apache.ftpserver.impl.IODataConnection.transfer(IODataConnection.java:238)
        at org.apache.ftpserver.impl.IODataConnection.transferFromClient(IODataConnection.java:131)
        at com.cfm.common.metamodel.impl.es.CFMFTPLet.onUploadStart(CFMFTPLet.java:116)
        at com.cfm.common.metamodel.impl.es.CFMFTPLet.beforeCommand(CFMFTPLet.java:43)
        at org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer.beforeCommand(DefaultFtpletContainer.java:163)
        at org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:156)
        at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:65)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:722)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
        at org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:90)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
        at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
        at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:137)
        at org.apache.mina.filter.util.CommonEventFilter.messageReceived(CommonEventFilter.java:70)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
        at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:392)
        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:228)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
        at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
        at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
        at java.lang.Thread.run(Thread.java:595)

At first it pauses for a while and then throws the exception above.

I am trying to execute the put <filename> from the client.

Any ideas what is causing this?

Thanks

Re: Getting socket exception

Posted by Niklas Gustavsson <ni...@protocol7.com>.
Hi

You need to send the 150 before starting the transfer (it's what
triggers the client to prepare for the transfer. After the transfer,
you also need to send a 226 to show that the command is complete.

/niklas

On Sat, Mar 7, 2009 at 7:04 PM, Edward Scanzano <es...@yahoo.com> wrote:
>
> Hi,
>
> I have this code
>
>    public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
>        ByteArrayOutputStream bos = null;
>
>        try {
>            bos = new ByteArrayOutputStream();
>            DataConnectionFactory dcf = session.getDataConnection();
>            DataConnection dc = dcf.openConnection();
>            dc.transferFromClient(session, bos);
>
>            session.write(new DefaultFtpReply(150, "Data transfer complete."));
>        } catch (Exception ex) {
>            ex.printStackTrace();
>        } finally {
>            session.getDataConnection().closeDataConnection();
>            if (bos != null) bos.close();
>        }
>
>        return FtpletResult.SKIP;
>    }
>
> and the line  dc.transferFromClient(session, bos) is throwing this exception
>
> java.net.SocketException: Connection reset
>        at java.net.SocketInputStream.read(SocketInputStream.java:168)
>        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
>        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
>        at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
>        at java.io.FilterInputStream.read(FilterInputStream.java:90)
>        at org.apache.ftpserver.impl.IODataConnection.transfer(IODataConnection.java:238)
>        at org.apache.ftpserver.impl.IODataConnection.transferFromClient(IODataConnection.java:131)
>        at com.cfm.common.metamodel.impl.es.CFMFTPLet.onUploadStart(CFMFTPLet.java:116)
>        at com.cfm.common.metamodel.impl.es.CFMFTPLet.beforeCommand(CFMFTPLet.java:43)
>        at org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer.beforeCommand(DefaultFtpletContainer.java:163)
>        at org.apache.ftpserver.impl.DefaultFtpHandler.messageReceived(DefaultFtpHandler.java:156)
>        at org.apache.ftpserver.listener.nio.FtpHandlerAdapter.messageReceived(FtpHandlerAdapter.java:65)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:722)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
>        at org.apache.ftpserver.listener.nio.FtpLoggingFilter.messageReceived(FtpLoggingFilter.java:90)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
>        at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
>        at org.apache.mina.filter.logging.MdcInjectionFilter.filter(MdcInjectionFilter.java:137)
>        at org.apache.mina.filter.util.CommonEventFilter.messageReceived(CommonEventFilter.java:70)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
>        at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:392)
>        at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:228)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
>        at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
>        at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
>        at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
>        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
>        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
>        at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
>        at java.lang.Thread.run(Thread.java:595)
>
> At first it pauses for a while and then throws the exception above.
>
> I am trying to execute the put <filename> from the client.
>
> Any ideas what is causing this?
>
> Thanks
>