java.net.SocketException:连接重置。restapi&x2B;插座

java.net.SocketException:连接重置。restapi&x2B;插座,java,Java,我正在SpringBoot中编写一个RESTAPI,它通过套接字连接到另一个Java应用程序。当我尝试一个接一个地执行http请求时,绝对没有问题。但是,当我尝试向我的Spring boot应用程序发送两个背靠背http请求时,该应用程序反过来授权进入套接字并等待来自套接字的响应,我得到一个套接字异常,如下所示 java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInput

我正在SpringBoot中编写一个RESTAPI,它通过套接字连接到另一个Java应用程序。当我尝试一个接一个地执行http请求时,绝对没有问题。但是,当我尝试向我的Spring boot应用程序发送两个背靠背http请求时,该应用程序反过来授权进入套接字并等待来自套接字的响应,我得到一个套接字异常,如下所示

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.read(BufferedReader.java:182)
我的代码窃贼在下面


    try(Socket socket = new Socket(host, port)) {
       if (socket.isConnected()) {                    
            //An output stream instance to write in the socket to IM
            DataOutputStream writer = new DataOutputStream(socket.getOutputStream());
            //Integer denoting the start of the text message
            writer.writeByte(STX);
            writer.writeBytes(String.valueOf(message));
            //Integer denoting the end of the text message
            writer.writeByte(ETX);
            //Checksum
            writer.writeBytes(String.valueOf(new ChecksumCalculator(message,null).calculate(true)));
            log.info("Data wrote in Socket.."+message);

            //Input stream instance to read the responses from IM
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            StringBuilder responseMessageFromIm = new StringBuilder();

            //Exit while loop after 30 seconds and close the socket
            long startTime = System.currentTimeMillis();
            int value;
            while ((value = reader.read()) != endText.get(messageSource) && (System.currentTimeMillis() - startTime < instrumentProperties.getSocketTimeout())) {
                //log.info(value+"->"+Character.toString((char)value));
                if(value == NAK){
                    return new IMResult(AppConstants.Res_Failed,AppConstants.Err_Nak);
                }
                if (asciiSymbols.containsKey(value)) {
                    responseMessageFromIm.append(asciiSymbols.get(value));
                }
                responseMessageFromIm.append((char) value);
                //Throw timeout exception if Instrument dit not respond back in the configured timeout
                if(System.currentTimeMillis() - startTime > instrumentProperties.getSocketTimeout()){
                    throw new TimeoutException();
                }
            }
            //socket.close();
            log.info("Data read from Sockets.."+responseMessageFromIm.toString());

        }
    }catch (Exception e) {
        e.printStackTrace();

    }

```

try(套接字=新套接字(主机、端口)){
if(socket.isConnected()){
//要在套接字中写入IM的输出流实例
DataOutputStream编写器=新的DataOutputStream(socket.getOutputStream());
//表示文本消息开始的整数
writer.writeByte(STX);
writer.writeBytes(String.valueOf(message));
//表示文本消息结尾的整数
writer.writeByte(ETX);
//校验和
writeBytes(String.valueOf(新的ChecksumCalculator(消息,null.calculator)(true));
log.info(“在套接字中写入的数据..”+消息);
//输入流实例以从IM读取响应
BufferedReader=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
StringBuilder responseMessageFromIm=新建StringBuilder();
//30秒后退出while loop并关闭插座
long startTime=System.currentTimeMillis();
int值;
而((value=reader.read())!=endText.get(messageSource)和&(System.currentTimeMillis()-startTime”+Character.toString((char)value));
如果(值==NAK){
返回新的IMResult(AppConstants.Res_失败,AppConstants.Err_Nak);
}
if(asciiSymbols.containsKey(值)){
responseMessageFromIm.append(asciiSymbols.get(value));
}
responseMessageFromIm.append((char)值);
//如果仪器dit未在配置的超时时间内响应,则引发超时异常
if(System.currentTimeMillis()-startTime>instrumentProperties.getSocketTimeout()){
抛出新的TimeoutException();
}
}
//socket.close();
log.info(“从套接字读取的数据…”+responseMessageFromIm.toString());
}
}捕获(例外e){
e、 printStackTrace();
}
```

尝试增加套接字时间,但这没有帮助。第一个http请求从套接字写入和读取,并关闭了套接字,而第二个请求正在套接字中执行一些操作。您能再给我们看一些代码吗。你的插座处理?连接是否在工作线程中处理?上述代码段是否可能阻止进一步的套接字连接?