2015-12-29 25 views
0

嗨java.net.ConnectException/java.net.ConnectException我试图发送一个二进制信息到服务器的IP和端口:取决于正常运行或调试模式

192.168.2.101:10001

每50封邮件重新打开一次套接字。

如果我正常运行应用程序,我会在第5行中得到一个java.net.ConnectException,尽管我可以ping和telnet服务器。

如果我调试应用程序,我得到一个java.net.SocketException在不同的行(11),有时第一条消息似乎通过没有任何错误。

private void sendMessage(String message, int relaisId, long timestamp) { 

    try { 
     if (connCount > 50) { 
      s = new Socket(ip, port); //RUN NORMALLY: java.net.ConnectException: Connection refused: connect 
      connCount=0; 
     } 
     outputStream = s.getOutputStream(); 

     outputStream.write(message.getBytes()); 
     outputStream.write(new byte[]{0});//DEBUG: java.net.SocketException: Connection reset by peer: socket write error 
     outputStream.flush(); 
     connCount++; 
    } catch (UnknownHostException ex) { 
     logger.error("Host not found: " + ip + ":" + port, ex); 
     connCount=51; 
     retryMessage(message, relaisId, timestamp);// basically sleep 3s then call sendMessage 
    } catch (IOException ex) { 
     logger.error("Error at Relais No. " + relaisId + ": " + ip + ":" + port, ex); 
     connCount=51; 
     retryMessage(message, relaisId, timestamp); // basically sleep 3s then call sendMessage 
    } finally { 
     try { 
      if (connCount > 50 && s != null) { 
       s.close();      
      } 
     } catch (IOException ex) { 
      logger.error("IOException", ex); 
     } 
    } 
} 

任何帮助或分析工具都非常赞赏:)

回答

0

我找到了解决办法。在我的程序中,不同的线程通过给定的IP和端口向外部硬件组件发送消息。 发生此错误是因为线程意外地使用相同的IP地址和端口启动了两次,导致使用相同套接字时的计时冲突。

更奇怪的是,这个错误在更换服务器的机器时开始发生,在它只是偶尔出现之前,我们认为这是网络通信中的一种噪音。

希望这是对未来任何人的帮助:)

相关问题