Java 网络客户端连接关闭太慢

Java 网络客户端连接关闭太慢,java,netty,nio,Java,Netty,Nio,以下是我的客户端源代码: public class Client { Server server; Logger logger; ChannelHandlerContext responseCtx; public Client(String host, int port, int mode, String fileName) { server=null; EventLoopGroup group = new NioEven

以下是我的客户端源代码:

public class Client 
{
    Server server;
    Logger logger;
    ChannelHandlerContext responseCtx;
    public Client(String host, int port, int mode, String fileName)
    {
        server=null;
        EventLoopGroup group = new NioEventLoopGroup();
        try 
        {
            Bootstrap b = new Bootstrap(); 
            b.group(group);
            b.channel(NioSocketChannel.class);
            b.remoteAddress(new InetSocketAddress(host, port));
            b.handler(new MyChannelInitializer(server, mode,fileName));
            ChannelFuture f = b.connect().sync();
            f.channel().closeFuture().sync();
            System.out.println("client started");
        } 
        catch (InterruptedException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            try {
                group.shutdownGracefully().sync();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Calendar endTime=Calendar.getInstance();
            System.out.println("client stopped "+endTime.getTimeInMillis());
        }
    }
    public static void main(String[] args) throws Exception 
    {
        @SuppressWarnings("unused")
        Client c=new Client("localhost",1234,MyFtpServer.SENDFILE,"D:\\SITO3\\Documents\\Xmas-20141224-310.jpg");
    }
}
public class FileTransferCompleteListener implements ChannelFutureListener 
{
    Server server;

    public FileTransferCompleteListener(Server server) 
    {
        this.server=server;
    }

    @Override
    public void operationComplete(ChannelFuture cf) throws Exception 
    {
        Calendar endTime=Calendar.getInstance();
        System.out.println("File transfer completed! "+endTime.getTimeInMillis());
        if(server!=null)
            server.stop();
        else
            cf.channel().close();
    }
}
以下是我的文件传输完整侦听器源代码:

public class Client 
{
    Server server;
    Logger logger;
    ChannelHandlerContext responseCtx;
    public Client(String host, int port, int mode, String fileName)
    {
        server=null;
        EventLoopGroup group = new NioEventLoopGroup();
        try 
        {
            Bootstrap b = new Bootstrap(); 
            b.group(group);
            b.channel(NioSocketChannel.class);
            b.remoteAddress(new InetSocketAddress(host, port));
            b.handler(new MyChannelInitializer(server, mode,fileName));
            ChannelFuture f = b.connect().sync();
            f.channel().closeFuture().sync();
            System.out.println("client started");
        } 
        catch (InterruptedException e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            try {
                group.shutdownGracefully().sync();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Calendar endTime=Calendar.getInstance();
            System.out.println("client stopped "+endTime.getTimeInMillis());
        }
    }
    public static void main(String[] args) throws Exception 
    {
        @SuppressWarnings("unused")
        Client c=new Client("localhost",1234,MyFtpServer.SENDFILE,"D:\\SITO3\\Documents\\Xmas-20141224-310.jpg");
    }
}
public class FileTransferCompleteListener implements ChannelFutureListener 
{
    Server server;

    public FileTransferCompleteListener(Server server) 
    {
        this.server=server;
    }

    @Override
    public void operationComplete(ChannelFuture cf) throws Exception 
    {
        Calendar endTime=Calendar.getInstance();
        System.out.println("File transfer completed! "+endTime.getTimeInMillis());
        if(server!=null)
            server.stop();
        else
            cf.channel().close();
    }
}
以下是执行结果:

File transfer completed! 1451446521041
client started
client stopped 1451446523244
我想知道为什么关闭连接需要2秒钟。 有没有办法减少它

非常感谢

看一看,您可以指定安静时间,默认为几秒钟。

我不确定如果缩短这个时间会有什么影响。

事实上,我正在开发FTP服务器。在活动模式下,当用户列出目录内容时,列表会快速显示在客户端,但需要一段时间才能将控件返回给用户。