PB プログラムを XP から win7 および win10 プラットフォームに移行する場合の FTP 送信エラーの分析と処理

状況説明

  • 会社が使用している一連の PB (PowerBuilder) プログラムは、FTP 経由でキャラクター ファイルのレポートを毎日アップロードします。この古いシステムにはソース コードがなく、実行中のプログラムのさまざまなコンポーネントがあるだけです。
  • このプログラムを取り除くのは不可能のようです。正式に退職するまで使用するつもりです
  • このプログラムはもともとXP 32bitで動作しており、インストールプログラムと実行ディレクトリは10年以上変更されていませんが、その他の機能はwin7,10(62bitでも32bitでも)でも正常に動作しているようですが、 FTP 送信でエラーが報告されます。

トラブルシューティングのプロセス

特定のプロセスを通じてソフトウェアを表示し、win7 プラットフォームで使用されるシステム コンポーネント (system32) dll ファイルを順番に検索します。

この記事は、win7 32 ビットおよび 64 ビットでのみテストされていますが、検出された理由とその後の現象によれば、win10、64、および 32 ビットでも利用できるはずです。

  1. PB の特定のネットワーク制御を通じて呼び出される、socketnet およびその他のシステム コンポーネントが使用されていることがわかります。これらのコントロールを置き換える試みが行われましたが、それは実現不可能であることが判明しました。システム的には大した問題ではないからです。この過程で偶然発見したのですが、
    WIn7 以降、システムはデータ送信のために 10,000 未満の TCP ポートを開くことがデフォルトで禁止されており、
    これを突破するのは不可能なようで、後で知りました。
  2. あまりにもどうしようもない状況で、ネットワーク関連と呼ばれるFTP機能のDLLをPBを使って逆コンパイルしました。次に、関連するファンクション コードを読み、FTP 送信のプロセスを理解します。ユーザー ログイン用に FTP IP: 21 ポートを開いた後、送信クライアント側は新しいローカル ポートを開き、アップロードするファイルのバイトをストリーミングします。相手がそれを拾ってくれるように。このポート番号は PB コンポーネントであり、オペレーティング システムの基礎となるコンポーネントによって呼び出され、空きポートに割り当てられます。
  3. このポートは、XP 時代では 10000 未満の番号でした。PB のこのフィールドのデータ型は、-32768 から +32767 までの範囲の 16 ビット整数です。win7 以降のプラットフォームでは、FTP 転送が機能する場合と機能しない場合があります。ポート番号が範囲外になる場合があるため、常に確率になります。

理由を分析する

プロセス追跡ツールと逆コンパイル ツールを使用することで、障害の原因が大まかに特定されましたが、win7 では、FTP はファイルをアップロードするためにローカル ポートを開く必要があります。そして、この終わりはランダムであり、PB 整数の最大値 32768 を超えると、比較的大きな値になる場合があります。うまくいかないだろう。

計画を提案する

障害現象に応じて、解決策は 2 つあります。

  1. バイナリ ファイルでは、この値の位置を描画しており、完全な値として手動で指定できます。8888 など。ポートが占有されていると問題が発生する可能性がありますが、この状況が発生する可能性は低いです。しかし、プログラマーとして、私はこれに満足していません
  2. この値の型を再定義します。型の場所を見つけるために、PB プラットフォームで最も単純なプログラムを作成しました。変数を 1 回だけ定義し、それを dll ファイルにコンパイルし、変数定義を変更して、 dll を再度使用して 2 つのファイルを比較します。違いが見られる箇所は 2 つあり、それは型定義による違いです。符号付き整数を符号なし整数に変更しました。または 32 ビット整数型に増加します。正確には思い出せません。そうすることで。元の DLL ファイルと型定義の場所を新しい修飾型に変更します。新しい DLL ファイルとして、古い DLL ファイルを置き換えます。プログラムで FTP アップロード機能を実行すると、エラーは発生しません。

実装テスト

なぜなら、選択肢 2 の実現可能性には問題があり、元の手順には一定の成功確率があるからです。そこで、DLL変更計画に従って最初のオンラインテストのために上位受信機に連絡したところ、やはり送信に失敗したことが分かりました。
しかし、1.の解決策はテストの選択肢に含まれておらず、この共同テストは最終的に不合格となった。
その後、32 ビット整数型を修正する必要がありましたが、最終的に win7 およびその他の上位プラットフォームの制限を回避し、64 ビット win7 環境での送信テストも実行し、毎回成功しました。 。このプロセスでは、ポート表示プログラムも使用して、新しく作成した FTP ポートの開閉を確認しました。
最後の実験は終了したとみなされますが、アップロード テストは再度実行されませんでした。
結局のところ、新しいシステム環境では、他のモジュールでどのような問題が発生するかを排除することはできないからです。そして、アップロードもその発見の一つかもしれません。
そのため、移行作業は実施されておらず、促進もされていない。ただ、数台の誰かが使ってみて、結果は悪くないということがわかっただけで、それが作者にとっては一番嬉しいことでもある。

おすすめ

転載: blog.csdn.net/wjcroom/article/details/126142780