質問

私は、あるコンピューターから別のコンピューターに画像を送信するプログラムを開発しています (マウス/キーボード入力を必要としないリモート アシスタンスに似ています)。これをテストするために使用した 2 台のコンピュータは、1 台は Windows XP マシン、もう 1 台は Windows Vista です。固定の XP マシンをルーターに直接接続し、ラップトップをワイヤレスで接続しています。

XP から Vista への転送はうまく機能し、Vista で表示される画像を一定の流れで取得することができます。しかし、それを反転してVistaからXPに画像を送信すると、機能しません。また、ローカルの「コピー」、つまりネットワークを介さずに画像のフローを取得することも試してみましたが、これはVistaでもXPでも機能しました。これは両方のマシンでまったく同じプログラムです。

関係ないと思いますが、画像には GDI+ を使用しています。そこで、ネットワーク上のストリームを通じて .jpg を送信し、反対側でそれを再構築します。

私のネットワークメッセージクラスが呼び出されます NetMsg. 。それはから構成されています char* type そして char* data. 。型によってデータの解釈方法が決まりますが、ここでは問題ありません。
コンピューター #1 と #2 を呼び出します。
接続が作成され、送信したい領域 #1 にマークを付けたら、次のようになります。
001>#1 はタイプ RESIZE // を送信して、#1 でマークした領域と同じサイズのウィンドウを #2 に取得します
002>#1 タイプ PICTURE_DATA を送信します // これは実際の画像データです
003>#2 上の 2 つのメッセージを受信した後、タイプ REQUEST_MORE を送信します // #2 はさらに画像データを要求します
004>#ステップ1に進む

XP から Vista に画像データを送信するときに、デバッグすることさえ気にしませんでした。それは、まさに私が望んでいたとおりにうまく動作するためです。ただし、Vista から XP に送信すると、次のことに気付きました。

  • 受信したデータは実際には 2 つになる可能性があります NetMsgs. 。データをいくつかに分割することでこれをサポートしています NetMsgs
  • 受信したデータが不完全である可能性があります。つまり、さらにデータを待つ必要があります。をマークすることでこれをサポートしています NetMsg 不完全として処理され、次のデータ送信で完了します。(最初のステップの組み合わせも)

いくつかの画像は正しく転送されたため、これでほぼうまくいきましたが、突然停止してしまいました。徹底的にデバッグしたわけではないので、なぜデータが突然停止したのかわかりません。しかし:

私が理解できないのは、XP から Vista に送信する場合はうまく機能するが、その逆は機能しないということです。私には何が欠けているのでしょうか?

コードの抜粋が必要な場合はお知らせください。ただし、コードは非常に膨大です...およそ500行。それ以外の場合は、Vista から XP にデータを送信する際の既知の問題を探しています。

助けやフィードバックをいただければ幸いです。

役に立ちましたか?

解決 3

これは、実際には両方のコンピュータ上でブロックし、他方が応答するための両方が待っていました。

他のヒント

本当にすべて確実に何も言うことは困難です。しかし、私は強く、あなたのプログラムのテストスイートを作成し、この特定の問題をキャッチテストケースを実装することをお勧めします。これは、障害を再現することが容易になり、問題を示すことができ、最小限のテストケースを生成しようとすることは、しばしば非常に有益です。あなたは(完全自動)テストケースを持っている場合にも、それは助けのために他の誰かに依頼することも容易になります。

あなたが本当に行う必要があることは、より詳細に問題を記述しています。 「それが動作していない」理由の100年代があるかもしれません。

あなたはを通じて任意のデータを取得していますか?

彼らはを通じて入手できますか、わずか数バイトを送信してみてください!

何も通じなっていない場合は、

、Vistaがデータを送信していますが、Wiresharkのを使用してみては?

XPはそれを受けていますか?

ここでは魔法、あなたは最初から最後までのデータパスを確認する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top