Как реплицировать сброс соединения по одноранговому узлу?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как реплицировать сброс соединения по одноранговому узлу?

Сообщение Anonymous »

У меня есть сервер, в журнале которого напечатано следующее

Код: Выделить всё

Caused by: java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)
at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1238)
at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:670)
at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:607)
at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:597)
at org.apache.coyote.http11.Http11OutputBuffer.flushBuffer(Http11OutputBuffer.java:519)
at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:260)
at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1494)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:279)
at org.apache.coyote.Response.action(Response.java:168)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:317)
Я знаю, что клиент по какой-то причине закрыл Соединение, но сервер все равно записывает данные. И в это время клиент вернет флаг сброса «RST», а в журнале сервера появится сообщение «Сброс соединения по одноранговому узлу».
Чтобы воспроизвести это, я сделал сервер спать на несколько секунд, а также создать клиент как таковой:

Код: Выделить всё

 private void executePostMethod() throws IOException, InterruptedException {
Map responseMap = new HashMap();
String data = "{\"id\":\"XYZ123\",\"name\":\"John Doe\",\"accountNumber\":\"ABC123\"}";
URL urlObject = new URL("\"http://localhost/v1/name/validate\"");
System.out.println("Creating Connection");
Socket socket = new Socket(InetAddress.getByName(urlObject.getHost()), 7080);
System.out.println("Connection Established");

PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("POST " + urlObject.getFile() + " HTTP/1.0");
printWriter.println("Host: " + urlObject.getHost());
printWriter.println("Content-Length: " + data.length());
printWriter.println("Content-Type: " + "application/json");
printWriter.println();   //Writing an empty line just to notify the server the header ends here
// and next thing written will the data/content
printWriter.println(data);
printWriter.println();
printWriter.flush();
Thread.sleep(5000);
socket.setSoLinger(true, 0);
socket.close();
}
Прежде чем сервер отправит ответ, закройте сокет и строку socket.setSoLinger(true, 0); Я полагаю, отправляет пакет RST. Но я получаю ошибку org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken Pipe
вместо сброса соединения по одноранговому узлу.
Как воспроизвести исключение java.io.IOException: сброс соединения по одноранговому узлу?
ОБНОВЛЕНИЕ
Я проанализировал TCP-соединение и вот что получил. Сервер получает пакет RST, прежде чем попытается отправить данные клиенту
Изображение

Теперь, насколько я знаю, если клиент отправляет пакет RST на сервер, сервер получает сброс соединения по одноранговому узлу , все, что я получаю, сломано труба.

Подробнее здесь: https://stackoverflow.com/questions/673 ... et-by-peer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»