最近在调试一个服务端程序,用的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、数据库、前端开发 领域专业技术问题,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、作业代写、安装包资源发送或安装、软件使用指导等服务。
我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。
同问