sunwul 发表于 2021-12-21 11:44

Socket响应消息的问题, 求解答

[!(https://s4.ax1x.com/2021/12/21/TKMnt1.md.png)](https://imgtu.com/i/TKMnt1)
以上是抓包图
----
**我方是服务端, 正常流程是当接收到客户端发送的消息报文时, 解析并处理, 处理完后响应消息给客户端, 以下是我方的接收与响应源代码**
```java
private void onAndSendMessage(Socket socket) {
      byte[] bytes = new byte;
      int len;
      try {
            // 获取输入流,建立缓冲区进行读取
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();
            StringBuilder sb = new StringBuilder();
            while ((len = inputStream.read(bytes)) != -1) {
                sb.append(new String(bytes, 0, len, "GBK"));
            }
            socket.shutdownInput();
            logger.info("接收消息:{}", sb.toString());
                                               
            // 处理逻辑,处理完客户端发来的消息后返回处理结果
            String request = payConfirmations(sb.toString());
                                               
            byte[] sendBytes = request.getBytes("GBK");
            outputStream.write(sendBytes);
            outputStream.flush();
            socket.shutdownOutput();
            logger.info("响应消息:{}", request);
      } catch (IOException e) {
            e.printStackTrace();
      } finally {
            if (socket != null) {
                try {
                  socket.close();
                } catch(IOException e) {
                  e.printStackTrace();
                }
            }
      }
    }
```
**现在的问题是, 我方能正常接收到客户端发来的消息, 但是我方响应的信息客户端无法收到. 通过抓包发现, 我方的消息其实是能发送到客户端的, 但是发送时机存在问题, 正常是我方响应后客户端立即就能接收到消息, 但现在却是客户端没有接收到消息,等待一段时间后,客户端发送需要断开连接的通知, 此时我方的消息才传递到客户端,导致整个流程无法按正常的功能设计来完成了**
---
**这种情况有没有朋友遇到过, 怎么解决呢**

tyler998 发表于 2021-12-22 08:23

防火墙检查一下

sunwul 发表于 2021-12-22 09:02

tyler998 发表于 2021-12-22 08:23
防火墙检查一下

有几个报文是我请求客户端, 他们响应的, 这些是正常的, 也就是我主动请求,客户端响应这样是没问题的, 现在客户端主动请求, 我响应按理也没有问题. 如果是防火墙的问题应该会拦截整个请求吧
页: [1]
查看完整版本: Socket响应消息的问题, 求解答