[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
質問
私のアプリケーションは、銀行サーバーのクライアントアプリケーションとして動作しています。このアプリケーションは、リクエストを送信し、銀行からレスポンスを取得しています。このアプリケーションは通常問題なく動作していますが、時々
I/O操作は、スレッド終了または アプリケーションの要求
エラーコードが995のエラーが出る。
public void OnDataReceived(IAsyncResult asyn)
{
BLCommonFunctions.WriteLogger(0, "In :- OnDataReceived",
ref swReceivedLogWriter, strLogPath, 0);
try
{
SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
int iRx = theSockId.thisSocket.EndReceive(asyn); //Here error is coming
string strHEX = BLCommonFunctions.ByteArrToHex(theSockId.dataBuffer);
}
}
一度このエラーが出始めると、それ以降のすべてのトランザクションで同じエラーが出始めるので。 この問題を解決するために、どうか助けてください。可能であれば、いくつかのサンプルコードで
よろしくお願いします。 アシシュ・カンデルワル
解決方法は?
995 は IO完了ポート . このエラーは、ソケットがクローズされているにもかかわらず、読み込みを継続しようとしたために発生します。
からの受信は0バイト
EndRecieve
は、ソケットが閉じられたことを意味します。
EndRecieve
が投げられます。
そういう場面から対処していく必要があります。
例外を決して無視してはいけません。例外が投げられるのには理由があるのです。
更新情報
サーバーが悪いということはないのですが。接続は、スイッチ/ルーター/ファイアウォールによってアイドル接続が閉じられたり、ネットワークの揺れ、ケーブルの不良など、さまざまな理由で失われる可能性があります。
私が言いたいのは、切断された場合は必ず処理しなければならないということです。適切な方法は、ソケットを破棄して、一定の間隔で新しいソケットの接続を試みることです。
受信コールバックについては、より適切な処理方法として、次のようなものがあります(半仮想コード)。
public void OnDataReceived(IAsyncResult asyn)
{
BLCommonFunctions.WriteLogger(0, "In :- OnDataReceived", ref swReceivedLogWriter, strLogPath, 0);
try
{
SocketPacket client = (SocketPacket)asyn.AsyncState;
int bytesReceived = client.thisSocket.EndReceive(asyn); //Here error is coming
if (bytesReceived == 0)
{
HandleDisconnect(client);
return;
}
}
catch (Exception err)
{
HandleDisconnect(client);
}
try
{
string strHEX = BLCommonFunctions.ByteArrToHex(theSockId.dataBuffer);
//do your handling here
}
catch (Exception err)
{
// Your logic threw an exception. handle it accordinhly
}
try
{
client.thisSocket.BeginRecieve(.. all parameters ..);
}
catch (Exception err)
{
HandleDisconnect(client);
}
}
なぜ3つのキャッチブロックを使っているかというと、単純に真ん中のキャッチブロックのロジックが他の2つと違うからです。BeginReceive/EndReceiveの例外は通常ソケットの切断を示しますが、あなたのロジックからの例外はソケットの受信を停止させるべきではありません。
関連
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] リクエストは中断されました。SSL/TLSセキュアチャネルを作成できませんでした
-
[解決済み] EntitySetの更新ができない - DefiningQueryがあり、<UpdateFunction>要素が存在しないため
-
[解決済み] .NETでコンソールアプリケーションの終了コードを指定するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。