1

この問題に関連する回答は他にもたくさんありますが、これは具体的なものだと思います。

私は Delphi XE2 と Indy 10.5.8 と TIdUDPServer を使用しています

私のローカル開発ネットワークでは、すべてが同じネットワーク IP サブレンジ上にあり、すべてがまったく同じアクセス ポイント (LinkSys) に接続されています。

ポート44444でTIdUDPServerを使用してDelphiでリッスンしているサーバーのIPアドレスを要求するために、255.255.255.255にUDPブロードキャストを送信するAndroidがあります。

リクエストは問題なく届き、問題なく返信できます。期待どおりに動作します。

ただし、一部のネットワークでは機能しないことに注意してください。それは常にアクセスポイントに基づく単純なネットワークです。よくわかりませんが、デバイスがすべて同じアクセスポイントでwifiを使用しているときにサーバーPCがLANポートに接続されていると問題が発生するようです。

アクセス ポイントが LAN と Wi-Fi の両方で UDP パケットをブロードキャストしていない可能性がありますか? この種のブロードキャストが非常に限られていることは知っていますが、同じアクセス ポイントにそのような制限があることを示す情報は見つかりませんでした。

テストする方法または回避策はありますか?

このソリューションは、多数の AP に対処できるほど強力である必要があります。

編集:以下の回答で述べたように、ブロードキャストIPを含むネットワークからより多くの情報を取得するためのソースコードを取得したい場合は、このソリューションに従ってください。すべてそこにあります。

http://www.code10.info/index.php?option=com_content&view=article&id=54:articleretrieve-network-adapter-information&catid=47:cat_coding_algorithms_network&Itemid=78

4

1 に答える 1

7

255.255.255.255UDPブロードキャストを送信するための最良のオプションではなく、一部のルーター/ファイアウォールは、特に設定しない限りブロックします. 代わりに、NIC の実際のサブネット ブロードキャスト IP を使用することをお勧めします。たとえば、UDP ソケットが192.168.0.1のサブネット マスクを持つローカル IP にバインドされ255.255.255.0ている場合、そのサブネットのブロードキャスト IP は です192.168.0.255

ほとんどのプラットフォームには、getifaddrs()POSIX システムなどの NIC の実際のブロードキャスト IP を取得するための OS 固有の API や、少なくともGetAdaptersInfo()およびGetAdaptersAddresses()Windows などの NIC のサブネット マスクを取得するための OS 固有の API があるため、ブロードキャスト IP を手動で計算できます。

ローカル ブロードキャスト IP の取得は、将来のバージョンで Indy に追加される可能性があります。

于 2013-08-20T19:24:38.287 に答える