2017-03-01 12 views
0

iOSアプリケーションからJmDNSを使用しているJavaベースのサーバーが見つかりました。Bonjourネットワークからホスト名を解決する

発見は正常に動作し、これは、詳細を記録するためにNetServiceDelegateによって実行されるコールバックです:

public func netServiceDidResolveAddress(_ service: NetService) { 
    guard let hostName = service.hostName else { 
     return 
    } 

    mockServerUrl = "http://\(hostName):\(service.port)/analytics" 
    Logger.log("Using mock server at \(mockServerUrl)", forLevel: .info) 
} 

これは、このように見えるURLになり: http://az-mbp-ether-lan.local.:9090

今、私は誓いますこれはうまくいきましたが、Alamofireでこのエンドポイントにデータを送信しようとすると、一貫してタイムアウトします。

ホスト名をターゲットマシンのハードコードされたIPアドレスに置き換えると、再び動作するため、データを送信するコードには根本的な問題はありません。

".local"で終わる上のフォームのアドレスが必要ですか?ターゲットサーバと同じネットワーク上のiOSデバイスから解決できますか?

+0

デリゲートメソッドを 'netServiceDidResolveAddres'は、IPv4アドレスとIPv6アドレスを解決するためのものです。 'didFindService'の後に変更されないホスト名に関しては何の効果もありません。 – vadian

+0

アドレスフィールドに戻ったアドレスを調べると、電話機からサーバーへの接続には役に立たないと思われる「127.0.0.1」であることがわかりました。 – zorro2b

+0

'struct sockaddr'オブジェクトを含む'(NS)Data'オブジェクトの配列である 'netServiceDidResolveAddress'メソッドの' addresses'配列からIPV4またはIPv6アドレスを抽出する必要があります。 – vadian

答えて

0

問題はJavaサーバー側で発生しています。 InetAddress.getLocalHost()を呼び出して登録していました。これはループバックアドレスを返していました。

が、私はこの質問に基づく非ループバックアドレスを見つけるために私のコードを改訂: IP Address not obtained in java

関連する問題