java.net.SocketException:连接重置。restapi&x2B;插座
我正在SpringBoot中编写一个RESTAPI,它通过套接字连接到另一个Java应用程序。当我尝试一个接一个地执行http请求时,绝对没有问题。但是,当我尝试向我的Spring boot应用程序发送两个背靠背http请求时,该应用程序反过来授权进入套接字并等待来自套接字的响应,我得到一个套接字异常,如下所示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
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请求从套接字写入和读取,并关闭了套接字,而第二个请求正在套接字中执行一些操作。您能再给我们看一些代码吗。你的插座处理?连接是否在工作线程中处理?上述代码段是否可能阻止进一步的套接字连接?