关于Netty的WriteAndFlush方法在客户端ShutDownOutPut后无返回的问题?

最近在调试一个服务端程序,用的Netty中间件,返回报文使用的WriteAndFlush方法。
调试的时候发现客户端在调用的时候,在发送完请求后调用了shutdownOutput方法,直接导致服务端不返回报文。把shutdownOutput这个方法注释掉后就正常返回了。 但客户端那边出于某种原因又不愿意改代码,请问碰到这种问题应该怎么解决。

客户端代码如下:
 

            List<String> packStrList = new ArrayList<String>();
            packStrList.add("297");// 8+4+30+10+10
            packStrList.add("0000");
            packStrList.add(account);
            packStrList.add(name);
            String mypack = pack("A8A4A30A255", packStrList);
            Socket socket = new Socket(ip, Integer.parseInt(port));
            OutputStream outputStream = socket.getOutputStream();
            OutputStreamWriter outSW = new OutputStreamWriter(outputStream, "gb2312");
            BufferedWriter bw = new BufferedWriter(outSW);
            System.out.println(mypack);
            System.out.println("长度" + mypack.getBytes("GBK").length);
            File file1 = new File("2.txt");
            if (!file1.exists()) {
                file1.createNewFile();
            }
            FileWriter fileWritter1 = new FileWriter(file1.getName(), true);
            fileWritter1.write(mypack);
            fileWritter1.close();
            bw.write(mypack);
            bw.flush();
            socket.shutdownOutput();

            InputStream inputStream = socket.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "GBK");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


            String info = "";
            String temp = null;

            while ((temp = bufferedReader.readLine()) != null) {
                info += temp;
                System.out.println("内容开始");
                System.out.println("client:" + info);
                System.out.println("内容结束");
            }

            byte[] retMsgArr = info.getBytes("GBK");
            String retLengStr = get_string(retMsgArr, 0, 12).trim();// 读取字符串长度
            String state = get_string(retMsgArr, 12, 2).trim();// 读取返回状态

            String msg = "";
            String time = "";
            String bpoint = "";
            String ch = "";
//            String name1 ="";
            if (state.equals("1")) {
                time = get_string(retMsgArr, 14, 10).trim();
                bpoint = get_string(retMsgArr, 24, 100).trim();
                cash = get_string(retMsgArr, 124, 20).trim();

            } else {
                msg = get_string(retMsgArr, 14, 100).trim();

            }

            System.out.println("获取到的字符串是retLengStr:" + retLengStr + ",state:" + state + ",msg:" + msg + ",time:" + time
                    + ",bpoint:" + bpoint + ",ch:" + ch);
            bufferedReader.close();
            inputStream.close();
            bw.close();
            outputStream.close();
            socket.close();

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,目前超出我们的服务范围,暂时无法为您解答。

首次提问人员可免费体验一次有问必答服务。目前首次提问的问题服务范围为:编程语言、Java开发、python、数据库、前端开发 领域专业技术问题,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、作业代写、安装包资源发送或安装、软件使用指导等服务。

我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。

同问