タイトルの通りなのですが、
gethostbyaddr関数にてサーバーPCのホスト名を取得しようとしたところ、
NULLが返ってきてしまうのです。
ただ、ファイアウォールを無効にすると取得できるのです。
他のPCで試したところ正常に取得できたので、
処理自体は間違っていないかと思います。
取得部分だけですが以下に示します。
// サーバ情報の取得
if( isalpha( EHost -> Text.SubString(1,1).c_str()[0] ) )
{
hostEnt = gethostbyname( EHost -> Text.c_str() ) ;
}
else // IPアドレスの時
{
addr = inet_addr( EHost -> Text.c_str() ) ;
hostEnt = gethostbyaddr( (char*)&addr, 4, AF_INET ) ;
}
if( hostEnt == NULL )
{
errMsg = "エラー:アドレスを解決できない [" + EHost -> Text + "]" ;
MessageDlg( errMsg, mtWarning, TMsgDlgButtons() << mbOK, 0 ) ;
SB -> SimpleText = errMsg ;
WSACleanup() ;
return ;
}
この処理自体は本についていたサンプルですので、
問題はないとおもいっています。
PCの設定も正常に取得できるPCに合わせてみても駄目でした。
ただ、何処か別の設定があるのかがわからないのです。
それと、OSがWindows Embedded Standard 2009なので、
OSイメージの作成に問題があるのかとも考えているのですが、
ファイアウォールの無効だけで取得できるようになるということは
何処か設定なのではと思っているのですが・・・。
開発環境はBoriand Developer Studio 2006です。
どなたか情報をお持ちの方がいらっしゃいましたら、
お教え頂けませんでしょうか。
よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> ただ、ファイアウォールを無効にすると取得できるのです。
ということは、DNS 問い合わせがブロックされてるんじゃないの?
エラーしたとき h_errno が設定されるようです。herror(), hstrerror() も。
gethostbyaddr() の代りに getaddrinfo(), getnameinfo() 使ってみるとか。こっちの方がエラー診断情報多いと思いますし、どういうエラーコードになってるかによって、firewall との関係も分かるかと思います。
trapeziumさん回答ありがとうございます。
getaddrinfo(), getnameinfo()なんですが、
設定してもエラーにはならないのですが、
何もデータが入っていないようなのです・・・。
何か設定が間違っているとは思うのですが。
それからWSAGetLastError()でエラー情報を取得してみたところ、
11004:WSANO_DATA
「要求した名前は有効ですが、要求された種類のデータは見つかりませんでした。」
というエラーが返ってきました。
ちなみにgethostbyname関数は成功します。
それから下記のように直接設定してconnectしてみたところ正常に接続することができました。
server.sin_family = AF_INET ;
server.sin_port = htons(EPortNum->Text.ToInt() ) ; // ポート番号を引数から
server.sin_addr.s_addr = inet_addr(EHost->Text.c_str());
gethostbyaddrだけが失敗するのです。
何かお分かりになりますでしょうか。
お手数ですがよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(コンピューター・テクノロジー) batファイルでPCの設定内容やプロパティーを取得したいのですが、コマンド1個で1ファイルとなるのを 2 2022/04/27 15:27
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Google Maps パソコンの地図サイトなどで 3 2023/02/18 23:06
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- その他(コンピューター・テクノロジー) DHCPサーバーについて、、、。 職場のネットワーク環境で困っています。サーバーはWindows s 3 2023/01/04 10:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ数をカウントしたいのですが
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
count(*)で取得した値をJAVAの...
-
ListViewで複数選択された項目...
-
JFreeChartの折れ線グラフの太...
-
JavaScriptでWindowsログオンID...
-
VBScriptで数値にコンマを付け...
-
Struts2 <s:select>タグの値取...
-
getParameter と getAttribut...
-
vbaで、オートシェイプ文字幅と...
-
EXCELのリストボックスを選択し...
-
ActiveWorkbook.Path取得できない
-
ExcelでNTPサーバーから時刻を...
-
VBA Shapesの座標からセル位置...
-
IFRAME内のURLを取得したです。
-
エクセルVBAで複数選択できるよ...
-
like演算子内に変数って使えな...
-
VBでFTPサーバ側のファイルの更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
Flexgridで選択行の列の値を取...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
JavaScriptでWindowsログオンID...
-
時間を分に変換するプログラム
-
エクセルVBAで複数選択できるよ...
-
Spreadの選択行の取得について
-
JavaScriptにおいてコンピュー...
-
コンボボックス表示文字列を取...
-
VBA リストボックス内の値を複...
-
利用者側のMACアドレスを取得し...
-
「Excel VBA」 Webクエリ マク...
-
Yahoo! JAPANのID取得について
おすすめ情報