2017-02-25 4 views
1

私はCesantaのMongooseサーバ/ "クライアント"ネットワーキングライブラリを実験しています。これはWindows 7 x64でPelle's Cを使っています。私は、サーバーへの20の接続をサポートするための2つのダイアログとメイン実行ファイル(サーバーとクライアント)としてポート90にLAN対応のテキストメッセージングアプリケーションを作成しようとしています。 FWIW、私は速いタイマーを使用してmg_mgr_poll(&mgr, 0)を呼び出し、UIの応答性を保持し、非常に小さなCPUを使用しています。クライアントMongoose C appにLAN DNSを問い合わせますか?

Cesantaは、サーバー通信のセットアップの良い例を示していますが、それは完璧に動作します。また、サーバーに接続するクライアントを取得することもできますが、サーバーのIPアドレスはmg_connect()で使用する必要があります。

サーバのホスト名はLANに公開されているので、LANにこのホストのIPを問い合わせることを望んでいました。私はしばらく前にVBでこの作業を持っていた:

Dim host As New IPHostEntry 
host = Dns.GetHostEntry(hostName) 
Return host.AddressList.GetValue(0) 

VBプロジェクトが大きくなったとしてしかし、VBは、見知らぬ人とはるかに難しいが、私は古き良きC.(に移行しましたおそらくそれはNetBIOS名にフォールバックされましたクエリ、dunno。)いいえ、私はむしろ再びC#またはC++/VSに移行しません。

DNS解決に関するCesanta documentationはかなり曖昧です。 mg_connect(&mgr, "MyServerPC:90", ev_handler);のようなコードは、単にmg_connectにもかかわらず、ホスト名を解決しようとしますが、クラッシュします。

マングースがローカル(LAN)ホスト名を解決し、どのように?または、これは無駄です.Winsockですべてを手動で行う必要がありますか?

答えて

1

私はあなたと同じ問題があります。

まず、返された接続がnullで何かをしようとすると、mg_connectがクラッシュしてはならないと思います。

第2に、mongooseは、レジストリの特定の場所からDNSを使用してアドレスを解決しようとします。これは、彼が見つけることができる最初のアドレスです。

場所は:SYSTEM\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces です。各インターフェイスでここを確認してください。 私はそこにバグがあると思う(私はそれの問題を開いて、それを修正しようとし、プルリクエストを作成しようとしている)。
リトルアップデート:
私は問題を解決し、この問題についてプルリクエストを作成しています。 https://github.com/cesanta/mongoose/issues/832
https://github.com/cesanta/mongoose/pull/833

マングースネームサーバとDhcpNameServerの値の各インタフェースをチェックし、それが見つけることができる(空でない)最初のものを返すが、それは、ネームサーバのために空の値を発見した場合にはDhcpNameServerをチェックしません(したがって、正しいアドレスを忘れて)エラーを引き起こし、名前解決をデフォルトサーバーに向ける(Google DNS -8.8.8.8と思う)。

/* 
    * See https://github.com/cesanta/mongoose/issues/176 
    * The value taken from the registry can be empty, a single 
    * IP address, or multiple IP addresses separated by comma. 
    * If it's empty, check the next interface. 
    * If it's multiple IP addresses, take the first one. 
    */ 

あなたは、レジストリに行くと、レジストリキーのネームサーバ

これにあなたのDNSアドレスの値を追加することでこの問題を解決することができますがマングースコードからのコメントです

関連する問題