ソフトウェアが原因で接続が中断された:recv failed エラーの説明
解決策1.
ソフトウェアが原因で接続が中断された:recvに失敗
java.net.SocketException: ソフトウェアが原因で接続が中断されました:recvに失敗しました
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
この例外が発生する原因は、Software causedに示すように様々です。
これは、ネットワークの問題ではなく、プログラミングの問題によるものです。
この例外が発生することが知られているシナリオの1つは、次のとおりです。
クライアントとサーバーが短いtcp接続を確立し、クライアントがリクエストを送信するたびに、サーバーが応答してクライアントとの接続を閉じます。サーバーが接続を閉じた後、クライアントが接続を解放しない場合、クライアントは引き続きリクエストの送信とレスポンスの受信を試みます。このとき、次のようなエラーが発生します。
.
このとき、クライアントソケットのgetOutputStreamから返されるOutPutStreamはローカルの接続状態を保持しており、リモートサーバーが対応するInputStreamとソケットを閉じたことを知る術はないため、out.write(sendbuf, 0, sendbuf. length);メソッドは呼ばれるが、実際にはサーバーはクライアントからリクエスト情報を受け取っていないことになる。例外が発生しないので、あたかもクライアントのリクエストが正常に送信されたかのように錯覚します。
次に、etInputStreamのin.read(header, 0, 14);メソッドを呼び出します。今回はサーバー側の情報を読み込んでいるため、Software caused connection abort: recv failed exceptionがスローされます。
原因をまとめると、サーバー/クライアントが一方的にコネクションを閉じた場合、相手側はまだtcp接続が確立されていると思い、相手側の応答データを読もうとしたため、Software caused connection abort: recv failed exceptionが発生したということである。
したがって、データを受信する前に、まず接続状態を判断する必要があります。inputstream の available() メソッドは、応答があるかどうかを判断するために使用される。available() が 0 を返した場合は、相手側が切断したためか応答がなく、available() が 0 以上を返した場合は、応答があることになる。また、available() が返す値はノンブロッキングであり、複数のスレッドからアクセスできることも注目すべき点である
相手側が接続を解放した後、ローカル接続も解放する必要があります。
Original code.
URL localurl = new URL(url) ;
URLConnection uc = localurl.openConnection() ;
uc.setRequestProperty("User-Agent","Mozilla/3.5.7 (compatible; MSIE 5.0; Windows NT; DigExt)");
uc.connect() ;
InputStream localObject1 = localurl.openStream(); System.out.println(localObject1.available()) ; byte[] localObject2 = new byte[131072]; StringBuffer localStringBuffer = new StringBuffer() ; int j = 0 ; while ((j = (localObject1).read(localObject2)) > 0){ localStringBuffer.append( new String(localObject2, 0, j, encoder)); } localObject1.close() ; modified code: URL localurl = new URL(url) ; URLConnection uc = localurl.openConnection() uc.setRequestProperty("User-Agent","Mozilla/3.5.7 (compatible; MSIE 5.0; Windows NT; DigExt)"); uc.connect() ; InputStream localObject1 = localurl.openStream(); System.out.println(localObject1.available()) ; byte[] localObject2 = new byte[131072]; StringBuffer localStringBuffer = new StringBuffer() ; int j = 0 ; while(true){ if(localObject1 .available()>0){ if((y=localObject1.read( localObject2))>0){ sb.append(new String(localObject2,0,y,encode)) ; } else{ break ; } }else if(in.available()==0){ System.out.println(& quot;The link to the server is broken") ; break ; } } localObject1.close() ;
解決策2.
ソケットが接続を確立すると同時に、データを読もうとすると、つまりread,catchすると、すぐに例外メッセージが表示される
ソフトウェアが原因で接続が中断されました: Recv failed"
その後、議論の末、送信したデータが監視センターサーバから指定されたプロトコルデータと不整合であることが判明し、正常にログインしなかったため、データを全く受け付けないことになった
NIOパッケージは使っていないし、この例外は何らかのjava.net.のものなのではないかと思えてきた。
以下は4つのエラーメッセージです。
SocketException:Connection reset by peer: socket write error java.net: ソフトウェアが原因で接続が中断された :socket write エラー
java.net.SocketException: ソフトウェアが原因で接続が中断されました: 回復に失敗しました
取得元:https://www.cnblogs.com/dengjiali2015/p/4560542.html
関連
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push s...
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] ssh-keygen' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] 削除したファイルを復元する(`git clean -fdx`を元に戻す)ことはできますか?
-
[解決済み] git は、ステージされていない変更があると言いますが、それを表示しません。
-
[解決済み] gitのルートディレクトリを1つのコマンドで取得する方法はありますか?
-
gitの問題 -----git----- マージが終了していない (MERGE_HEADが存在する) git pullに失敗しました。
-
エラーヒント:リモートには、あなたが行う作業が含まれているため、更新が拒否されました ソリューション
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] 無効なVCSルートマッピング - 私のプロジェクトで3つのエラーが発生しました。
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。
-
[解決済み] git initを2回実行すると、リポジトリが初期化されますか?それとも既存のリポジトリを再初期化しますか?
-
[解決済み] サブモジュールでないパスに対するサブモジュールのマッピングが .gitmodule に見つからない
-
[解決済み] Git での stash pop を中止する
-
git は "正しいアクセス権があり、リポジトリが存在することを確認してください。" という問題に遭遇しました。