エラー 56: DataSocketがシェア変数への接続を開く際にエラーが発生する

更新しました Aug 22, 2023

使用製品

ソフトウェア

  • LabVIEW

問題

LabVIEWクライアントアプリケーションでは、サーバマシン上でホストされているシェア変数への接続を開きます。クライアントはエラーなく実行されます。しかし、クライアントマシンでナショナルインスツルメンツ(NI)のソフトウェアをアップグレードすると、次のようなエラーメッセージが表示されます。


エラーコード56が不明位置で発生

考えられる理由:

LabVIEW:  
ネットワーク操作がユーザにより指定された時間制限またはシステムの時間制限を超えました。


シェア変数のファイアウォールとネットワークアドレス変換ルータを構成するの手順に従っていますが、それでもエラーが発生します。新しいコンポーネントをアンインストールしても問題は解決しません。

解決策

この記事は、特定のケースに適用されます。使用しているシステムにこのケースが当てはまるかどうかを判断するには、まず上記のリンクの手順に従ってから、以下のいずれかの方法を行います。
 

  • シェア変数をホストするサーバ上のファイアウォールを無効にして、クライアントアプリケーションを再実行します。エラーが解消された場合、この問題はおそらくお使いのシステムに当てはまります。

     
  • クライアント側とサーバ側の両方でC:\Windows\System32\lkads.dllのバージョンを確認します。クライアント側が5.1.0以上のバージョンを実行していて、サーバ側が5.1.0未満のバージョンを実行している場合、この問題はおそらくお使いのシステムに当てはまります。

     
  • ネットワーク監視アプリケーションを使用して、クライアント側からホスト側へのTCPおよびUDPトラフィックを表示します。クライアント側から、サーバ側上の変数であるPSP URLへのDataSocket接続を開きます。ポート2343でTCP要求が発生し、その後クライアントアプリケーションでエラー56が発生した場合は、このエラーがシステムに当てはまる可能性があります。


システム上で実行されているLabVIEWのすべてのバージョンは、同じLogosプロトコルスタックを使用してLabVIEWシェア変数と通信します。この問題は、サーバ上でWindowsファイアウォール(または同様の動作をする別のファイアウォール)が有効になっている場合に、2009 Logosプロトコルスタック(またはそれ以降)が8.5または8.6スタックを実行しているシステムに接続している変数クライアントに影響します。


ファイアウォールは、ブロックされたTCPポートに対する要求をバックグランドで無視します。この動作は、ポートスキャン攻撃に効果的です。その結果、Logosプロトコルは、20秒のTCP接続タイムアウトが満了するまでポートが使用不可であるという指示を受け取りません。タイムアウトに達すると、アプリケーションはエラーを返します。問題を解決するためには、次の方法の1つを行います。
 

  • 2009 Logosプロトコルスタックを使用するようにサーバシステムをアップグレードします。クライアントと同じソフトウェアをインストールして、サーバ上の C:\Windows\System32\lkads.dllが5.1.0以上にアップグレードされていることを確認します。lkads.dllはファイアウォールの例外を使用してポート2343を開くため、これで問題は解決します。
     
  • サーバのファイアウォールでTCPポート2343対して例外を追加します。
  • DataSocketを開く関数のタイムアウトを増やします。
  • その他のオプションについては、NIテクニカルサポートにお問い合わせください。