2017-11-02 19 views
-2

PC上の別のアプリケーションが同じリモートIPアドレスに接続されていると、Javaアプリケーションが正しく接続できなくなります。接続がすでに使用されているときにJavaがnio SocketChannel接続を取得する

これは、ソケットチャネルを閉じずにexits abruptlyを実行したときにも発生します。接続がブロックされ、後続のセッション中に接続することはできません。

基礎となるOSの接続状態に関係なく、私のプログラムが100%時間を確実に接続できるようにするにはどうすればよいですか?私は、クロスプラットフォームソリューションを探しています

(Windowsの& Ubuntuの)

public void connect() throws CommunicationIOException { 

    try { 

     if (isConnected()) { 
      return; 
     } 

     socket = SocketChannel.open(); 
     socket.socket().connect(new InetSocketAddress(getHostname(), getPort()), getConnectionTimeout()); 

     if (!isConnected()) { 
      throw new CommunicationIOException("Failed to establish the connection"); 
     } 

     socket.configureBlocking(false); 

    } catch (final IOException ex) { 

     throw new CommunicationIOException(
       "An error occurred while connecting to " + getHostname() + " on port " + getPort(), ex); 
    } 

} 

public boolean isConnected() { 
    if (socket == null) { 
     return false; 
    } else { 
     return socket.isConnected(); 
    } 
} 

public void close() throws CommunicationIOException { 

    if (socket != null) { 

     try { 

      socket.close(); 

     } catch (final IOException ex) { 

      throw new CommunicationIOException(
        MessageFormat.format(
          "An error occurred while attempting to close the connection to {}:{}", 
          getHostname(), getPort()), ex); 
     } 

    } 
} 
+0

すべての洞察力(および下位票)のおかげで@EJPに感謝します。まだ解決していない! – klonq

+0

あなたは両方のダウンワードを私に帰しているようです。ここでお客様一人一人がダウンボトム。もっとナンセンス。 – EJP

答えて

0

PC上の別のアプリケーションが同じリモートIPアドレスに接続されている場合は、Javaアプリケーションが正しく接続に失敗します。

サーバーが不適切にプログラムされていない限り、それはできません。

これは、ソケットチャネルを閉じずに突然終了する場合にも発生します。

何かが不適切にプログラムされていない限り、それはできません。

接続はありません、それはできません

をブロックすることができます。

以降のセッションでは接続できません。

いいえ、それはありません。

私は関係なく、基盤となるOSでの接続の状態は、私のプログラムは、100%の時間を接続することを保証するために何ができますか?

100%保証はありません。しかし、あなたの恐怖は上記のように根拠がありません。

+0

実際には、あなたは間違っているん:java.net.ConnectException:によって引き起こさ – klonq

+0

を発生します。2つの以下の例外の一つの接続が拒否:これ以上の情報 \t sun.nio.ch.SocketChannelImpl.checkConnect(ネイティブメソッド)で \tでsun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) \t at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor。ジャワ:java.nio.channels.ClosedChannelException:によって引き起こさsotec.automation.io.conn.tcp.TcpConnection.connect(TcpConnection.java:96) – klonq

+0

における111) \tヌル\t sun.nio.ch.SocketChannelImplで.finishConnect(SocketChannelImpl.java:698) \t at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:111) \t at sotec.automation.io.conn.tcp.TcpConnection.connect(TcpConnection.java:96) ) – klonq

関連する問題