xsocket错误:ExtendedClosedChannelException: channel is closed是怎么回事

笨笨猴 发布于 2014/06/18 17:08
阅读 1K+
收藏 0

我用xsocket写了一个客户端,给服务端发送请求信息后,再得到服务端返回的内容,但问题是现在总是报一个通道关闭的问题,错误提示如下:


org.xsocket.connection.ExtendedClosedChannelException: channel is closed (read buffer size=0)
at org.xsocket.connection.AbstractNonBlockingStream.ensureStreamIsOpen(AbstractNonBlockingStream.java:1522)
at org.xsocket.connection.AbstractNonBlockingStream.readByteBufferByDelimiter(AbstractNonBlockingStream.java:533)
at org.xsocket.connection.NonBlockingConnection.readByteBufferByDelimiter(NonBlockingConnection.java:1587)
at org.xsocket.connection.BlockingConnection$ByteBuffersByDelimiterReadTask.doRead(BlockingConnection.java:826)
at org.xsocket.connection.BlockingConnection$ByteBuffersByDelimiterReadTask.doRead(BlockingConnection.java:813)
at org.xsocket.connection.BlockingConnection$ReadTask.read(BlockingConnection.java:1231)
at org.xsocket.connection.BlockingConnection.readByteBufferByDelimiter(BlockingConnection.java:810)
at org.xsocket.connection.BlockingConnection.readBytesByDelimiter(BlockingConnection.java:882)
at org.xsocket.connection.BlockingConnection.readBytesByDelimiter(BlockingConnection.java:875)
at org.xsocket.connection.BlockingConnection.readBytesByDelimiter(BlockingConnection.java:861)
at test.XSClient.main(XSClient.java:46)

我的例子代码如下:

        // 采用非阻塞式的连接
        INonBlockingConnection nbc = new NonBlockingConnection(HOST, PORT,
                new ClientHandler());


        // 采用阻塞式的连接
        // IBlockingConnection bc = new BlockingConnection("localhost", PORT);
        // 一个非阻塞的连接是很容易就变成一个阻塞连接
        IBlockingConnection bc = new BlockingConnection(nbc);
        bc.setIdleTimeoutMillis(15000);
        bc.setReadTimeoutMillis(15000);


        // 设置编码格式
        bc.setEncoding("UTF-8");
        // 设置是否自动清空缓存
        bc.setAutoflush(true);
        // 向服务端写数据信息
        bc.write("abc");

        // 向客户端读取数据的信息
        byte[] byteBuffers = null;
        try {
            byteBuffers = bc.readBytesByDelimiter("UTF-8"); //出错行
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 打印服务器端信息
        System.out.println("收到的:" + new String(byteBuffers));
        // 将信息清除缓存,写入服务器端
        bc.flush();
        bc.close();


请问是哪里的问题,谢谢!


加载中
0
笨笨猴
笨笨猴
服务端是用C++写的,我只知道该服务端的IP和端口,然后发送请求过去,得到其返回给我的结果即可。
0
平安北京
应该是服务器端主动给你断了吧,你可以添加个onDisconnect方法,打印下日志
返回顶部
顶部