java.net.SocketException: исключение тайм-аута соединения не связано с методом setTimeout, который связан только с SocketTimedoutException.
Из трассировок сообщений, захваченных tcpdump, как показано ниже:
NO. Time Source Destination Protocol Info
14845 2012-02-07 22:37:46 10.* 10.* DNP 3. len=1,from 52156 to 29466,ACK
14846 2012-02-07 22:37:46 21.* 10.* DNP 3. len=1,from 54562 to 50276,ACK
14848 2012-02-07 22:37:46 32.* 10.* DNP 3. [TCP Restransmission] len=1,from from 52156 to 29466,ACK
……(7 times retransmission)
14849 2012-02-07 22:37:47 10.* 10.* DNP 3. [TCP Restransmission] len=1,from from 52156 to 29466,ACK
пока эти журналы генерируют исключение java.net.SocketException: время соединения истекло в 22:54, примерно через 15 минут после вызова writeObject.
Таким образом, мы можем сделать вывод, что это исключение вызвано тем, что, возможно, tcp-соединение было недоступно из-за долгого (около 30 минут) отсутствия трафика, в то время как метод socket.close () не вызывается для закрытияв сокет в данном случае, затем выдается это исключение.
, поэтому, чтобы избежать этого исключения, вы должны поддерживать соединение активным, используя метод Socket.setKeepAlive (), хотя, возможно, вы не использовали метод setTimeout (), означая запрос сокета к неограниченному блоку для получения;
Или примените механизм сердцебиения в своих приложениях.