4

サーバーへの SSL 接続を確立しようとすると、IBM AIX で次の例外が頻繁に発生します。

java.net.SocketException: Socket closed
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275(Compiled Code))
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(DashoA6275(Compiled Code))
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java(Inlined Compiled Code))
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java(Compiled Code))
at java.io.FilterOutputStream.flush(FilterOutputStream.java(Compiled Code))
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java(Compiled Code))
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java(Compiled Code))
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java(Compiled Code))
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java(Inlined Compiled Code))
at com.eximtechnologies.httptransport.client.ClientTransport.receiveMessages(ClientTransport.java(Compiled Code))
at com.eximtechnologies.httptransport.client.ClientTransport.receiveMessages(ClientTransport.java(Inlined Compiled Code))
at com.eximtechnologies.ecserver.connection.XMSHTTPConnection.checkForNewMessages(XMSHTTPConnection.java(Compiled Code))
at com.eximtechnologies.ecserver.connection.XMSHTTPConnection.timeoutExpired(XMSHTTPConnection.java(Compiled Code))
at com.eximtechnologies.xmd.timer.TimerEvent$1.run(TimerEvent.java(Compiled Code))

エラーから、これは単なるネットワークの問題であると思われますが、クライアントは約 2 か月前に問題を経験したことがなく、ネットワーク レイアウトに変更はありませんでした。

これもかなり頻繁に受け取ります。

java.net.SocketException: Connection timed out:could be due to invalid address
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:336)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:201)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:188)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.connect(Socket.java:428)
at java.net.Socket.<init>(Socket.java:335)
at java.net.Socket.<init>(Socket.java:210)
at javax.net.ssl.SSLSocket.<init>(Unknown Source)

これは AIX の問題だと思いますが、ファイアウォールの問題ではないでしょうか? また、google 検索で、コモンズ http の問題をほのめかしている人を見ましたが、それがどのように関連するのかわかりませんでした。

これは、他の人が最近 AIX で見たものですか?

4

3 に答える 3

3

「java.net.SocketException: Socket closed」は、あなたの側がソケットを閉じたことを意味します。これは、サーバーへの SSL 接続を試みたときに発生するとおっしゃっています。ただし、スタック トレースは、HTTPClient が既に確立された接続を介して HTTP 要求を書き込もうとしたときにこれが発生することを示唆しています。

これは、たとえば、HTTPClient によって以前に閉じられた接続を介して HTTPClient にリクエストを送信させることができた場合、またはおそらくあなたの側の他のコードによって発生した場合に発生する可能性があります。基になるソケットのどこかにアクセスしているかどうかを確認してください。または、ソケットが SSL/TLS プロトコルによって閉じられている可能性があります (私が間違っていなければ、SSL/TLS には基になる接続を閉じるための独自の上位レベルのプロトコルがあります) が、HTTPClient は何とかこれに気付かなかった (don可能かどうかはわかりませんが、たとえば、リモート側が SSL 接続を閉じましたが、HTTP/1.1 永続接続を使用していて、Connection: close 応答を設定していませんでした)。

これらの問題は、tcpdump/Wireshark を使用して TCP トラフィックを分析することでトラブルシューティングできます。また、マシン上でサーバーの HTTPS ポートに対して stunnel を開始し、このトンネルを介してプレーン HTTP 経由でコードをサーバーと通信させることもできます。これにより、HTTP トラフィックをプレーンテキストで表示できるようになります。

「java.net.SocketException: Connection timed out」は、タイムアウトにより TCP 接続を確立できなかったことを意味します。パケットがファイアウォールによってドロップされた可能性があります。たとえば、HTTP プロキシを使用して HTTPS 要求を行う必要がある場合があります。サーバー マシンが非常にビジーであるか、ネットワークが非常にビジーである可能性もあります。繰り返しますが、tcpdump/Wireshark を試して、TCP レベルで何が起こっているかを確認することをお勧めします。

于 2008-10-17T22:53:54.353 に答える
0

うまくいかなくても驚かない!

指定されたタイムアウトは、指定された接続マネージャーから接続を取得するためのタイムアウトであり、別の設定セットを必要とする実際のソケットまたはサーバーのタイムアウトではありません。

于 2011-01-25T05:16:20.107 に答える
0

マルチスレッド接続を使用して修正された http クライアントで問題が発生しました。以下の構成の最初の構成から 2 番目の構成に移動することで、この問題を修正しました。

<bean id="httpClient" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
    <property name="httpClient">
        <bean class="org.apache.commons.httpclient.HttpClient">
            <property name="connectionTimeout"><value>1000</value></property>
            <property name="timeout"><value>3000</value></property>
        </bean>
    </property>
</bean>

<bean id="httpClient" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
    <property name="httpClient">
        <bean class="org.apache.commons.httpclient.HttpClient">
            <property name="connectionTimeout"><value>1000</value></property>
            <property name="timeout"><value>3000</value></property>
            <property name="httpConnectionManager">
              <bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager" destroy-method="shutdown">
                <property name="params">
                  <bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
                    <property name="defaultMaxConnectionsPerHost" value="20" />
                  </bean>
                </property>
              </bean>
            </property>
        </bean>
    </property>
</bean>
于 2008-10-17T21:28:37.600 に答える