0

C、Linux、および GIO GSocket を使用して、TCP 経由でデジタル プロジェクターと通信する小さなアプリケーションを構築しています。ソケットは正常に接続され、メッセージをプロジェクターに正常に送信できます。私の問題は、コマンドを受信したときにプロジェクターから返される自動確認メッセージを受信できないことです。メッセージを送信してから g_socket_receive を使用すると、ブロックされ、応答を受信しないようです。

他の言語での過去の同様の問題に基づいて、この問題に対する私の疑いは、g_socket_send を使用してメッセージを送信すると、ランダムに利用可能なローカル ポートでメッセージが送信されることです。プロジェクタは、メッセージの送信元のポートに自動的に応答します。使用されたポートがわからないため、GSocket を正しいポートでリッスンさせることができません。他の言語では、ローカルの送信ポートを手動で設定するだけで、応答がどこに返されるかを知ることができました。ただし、GSocket を使用してこれを行う方法については、まったく情報を見つけることができませんでした。

誰でもこれについて支援を提供できますか、または私が見逃している問題が他にある可能性について何か考えがありますか?

ありがとう!

4

2 に答える 2

0

リッスン ソケットの場合と同様にGSocket、関数を使用してアウトバウンドをローカル アドレス (IP とポート) にバインドできます。g_socket_bind

ただし、それを行っても問題が解決する可能性は低いです。プロジェクターは、要求が送信されたポートに応答パケットを送信する必要があります。クライアントソケットを特定のポートにバインドする必要があることはほとんどありません。wiresharkまたはで送受信内容を確認しtcpdumpます。

于 2013-09-23T14:23:36.640 に答える