A 回答 (10件)
- 最新から表示
- 回答順に表示
No.10
- 回答日時:
もし gethostbyname の引数にホスト名でなく "localhost" を指定したらうまく接続できるのであれば、ループバックでの接続はできてるので、ネットワークの設定の方がおかしいということになりそうです。
質問者さんの自宅(?)のブロードバンドルータに対してDDNSでホスト名を割り当てており、そのホスト名経由で、自身のPC内で動くサーバに接続したいということでよいでしょうか。一応、それ前提で話を進めますと…
まず、ホスト名が正しくルータのグローバル側に割り当てられていることを確認しておく必要があります。グローバルIPアドレスを確認できる以下のようなサイト
http://www.cman.jp/network/support/go_access.cgi
で表示されたIPアドレスと、gethostbyname で取得されているIPアドレスが同じであることを確認します。同じであればアドレス解決は正しく行われています。
次に、ブロードバンドルータのポート解放と、そのポートへのTCP接続をあなたのPCに転送する(ポートマッピング)設定を行う必要があります。この辺りはすでにやってるでしょうか…?
転送先IPアドレスにはあなたのPCのアドレス(プライベートIPアドレス)を指定する必要がありますが、正しく設定できていますか?
また、ルータの機種によっては転送先のポート番号を別のものにできたりする場合もあるかと思いますが、混乱しないよう同じ番号にしておくのがよさそう。
さらに、ブロードバンドルータのパケットフィルタリングで遮断するように設定されているポートは接続できないので注意が必要です。同様に、PC側のファイヤウォールやセキュリティソフトの設定も確認して、そのポートへのアクセスを遮断しないようにする必要があります(危険を承知で一時的に全部OFFにするという手も)。
No.9
- 回答日時:
>いえ、グローバルIP?であることは確かなので大丈夫なはず・・・・・です
なぜ疑問符・・・
>というか、ダイナミックDNSって非固定のグローバルIPをホスト名にリンクさせるやつだと思ったのですが
#3の補足だとループバックアドレスを書かれていましたし、
>server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
どういったアドレスを設定されてたのかは書かれていませんでしたので。
>inet_addr()の方でよろしければどちらも0でした
gethostbyname()のときのをたずねられてるんだと思いますけど。
この回答への補足
gethostbyname()ではconnectを抜けてくれないので不明です。
ちなみに、ホスト名とIPアドレスが一致してない可能性に思い当たり確認してみましたがきちんと一致していました
No.7
- 回答日時:
>一応、ポートを解放しているのでネットまでいったん出してからPCに戻すという方法は可能です(ホスト名を使わないでアドレスを直接inet_addr()で入れるとちゃんと通信できる)
「inet_addr()で入れる」というのはLAN内のアドレスではないですか?
#6でもいわれてますがLAN内部からWAN側のアドレスでLAN内にアクセスするにはポート開放だけではなくルーターがNATループバックをサポートしていないとできません。
この回答への補足
>「inet_addr()で入れる」というのはLAN内のアドレスではないですか?
いえ、グローバルIP?であることは確かなので大丈夫なはず・・・・・です
というか、ダイナミックDNSって非固定のグローバルIPをホスト名にリンクさせるやつだと思ったのですが
No.6
- 回答日時:
>ただ、h_addr_listの値が 0x00625284 "|esonline.ddo.jp"
紛らわしいですが、一応取得はできているようです。
# こちらでも確認はしましたが。
型が「char FAR * FAR * 」なので、ローカル変数でのウオッチでは正しく表示できないだけでしょう。
メモリウィンドウで観ると4バイトで値が入ってます。
ウォッチで名前に「*(unsigned int *)host->h_addr_list[0]」としても確認できます。
>回線がバグっていたようで今表示されました。
>#5の補足にコードを記述してありますが、ブロッキングはされていないようです。
connect()がタイムアウトしたのでしょう。
http://msdn.microsoft.com/en-us/library/windows/ …
WSAGetLastError()でエラーコードが確認できるはずです。
んで……
そのプログラムを実行している環境(LAN)のグローバルIPアドレスはなんです?
ddo.jpはDDNSのようですが……。
LAN内部からブロードバンドルータのWAN側IPアドレスへの接続要求を通したいのでしたらそれ相応の製品が必要ですが、そこらヘンはクリアされているんですかね?
NATループバックとかヘアピンNATとか…。
# Aterm WR8300Nでは…connect()がSOCKET_ERRORを返却、WSAGetLastError()が10061を返却。
# エラールックアップで10061を検索すると「対象のコンピューターによって拒否されたため、接続できませんでした。」でした。
# ポート番号は外向けに開けてある非標準ポート番号(外部からのssh接続のために開けてある)のもの。
この回答への補足
一応、ポートを解放しているのでネットまでいったん出してからPCに戻すという方法は可能です(ホスト名を使わないでアドレスを直接inet_addr()で入れるとちゃんと通信できる)
補足日時:2013/05/03 20:19No.5
- 回答日時:
ほかに考えられるのは、gethostbynameがエラー(NULL)を返したにも関わらず、エラーメッセージの表示等することなく、何事もなかったかのように処理を進めようとしているなど。
この回答への補足
#3の補足にもある通り、NULLは帰ってきてないようです。
ただ、h_addr_listの値が 0x00625284 "|esonline.ddo.jp"
であるようなので、どちらにしろconnectではストップしてるでしょうね
しかし、解せないのはconnect前のprintfが表示されないこと・・・・・
もちろん、正しいgethostbynameの使い方も知りたいですが。
No.3
- 回答日時:
>しかし、例えば画像を描画しようとしても何も起こらないのです。
(gethostbynameをコメントアウトすれば描画される)gethostbynameを使ってるのが問題だと思うのでしたら、せめてその部分のコードくらい書きませんか。
今ある情報だけだと「gethostbynameを使って何か変なことしてるんでしょ」くらいしかいえません。
この回答への補足
エラーが起こる最低限のプログラムはこうです
(この場合だとデータの送受信が出来ない)
http://www.geekpage.jp/programming/winsock/tcp.php
このページのクライアントとサーバープログラムをそれぞれコピペし、
クライアントプログラムのIPアドレスの部分を
struct hostent *host;
----host = gethostbyname("esonline.ddo.jp");
if( host!=NULL )
{
----server.sin_addr.S_un.S_addr = *(unsigned int *)host->h_addr_list[0];
}
としています。
これを使うとデータの送受信が一切できません。これをコメントアウトして
server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
だとちゃんと成功します
なお、if文の中には入っているようです。
ああ、書き忘れがありました。
上の補足だけだと、もしかしたらIPアドレスがちゃんと格納されておらず(つまりconnect失敗)の可能性もあるため、
connectの前に
printf( "test" );
としましたが、表示されませんでした
No.2
- 回答日時:
気にするようなものでもないんですけどね。
>gethostbynameをコメントアウトするとそのようなエラーは出ません。
関連するDLLを読み込まないから…でしょう。
gethostbynameをコメントアウトしたところで、別のDLLを読み込んだ際に似たような表示はあるハズですが。
'C:\Windows\SysWOW64\ntdll.dll' を読み込みました。Cannot find or open the PDB file
'C:\Windows\SysWOW64\kernel32.dll' を読み込みました。Cannot find or open the PDB file
'C:\Windows\SysWOW64\KernelBase.dll' を読み込みました。Cannot find or open the PDB file
'C:\Windows\SysWOW64\msvcp100d.dll' を読み込みました。シンボルが読み込まれました。
'C:\Windows\SysWOW64\msvcr100d.dll' を読み込みました。シンボルが読み込まれました。
とか。
# うざったいので「モジュールの読み込みメッセージ」「モジュールのアンロード メッセージ」は表示しないようにしていますね。
>例えば画像を描画しようとしても何も起こらないのです。(gethostbynameをコメントアウトすれば描画される)
なんらかのバグが表面化しているだけでは?
コード掲示されているわけでもないので、その不具合がどちらにあるものなのかは不明ですが。
No.1
- 回答日時:
その出力メッセージはエラーではありません。
実際に、何も問題なくプログラムを実行することができているはずです。デバッガは実行時に.exeや.dllがロードされるとき、そのDLLのデバッグシンボルが定義された.pdbファイルを探そうとします。これは、自分で作成した.exeや.dllだけでなく、WindowsのシステムDLLに関しても同じように動きます。
ただし、デフォルトの状態ではデバッグ時にシステムDLLの.pdbをマイクロソフトのシンボルサーバから自動的にダウンロードしてくるようには設定されておらず、デバッガ上で実行したときはシステムDLLを読み込む際にそのメッセージが出力されてしまいます。
デバッグオプションの設定でマイクロソフトのシンボルサーバからシンボルを読み込むようにすれば、(シンボルサーバがシンボルを提供するDLLに限っては)そのメッセージが出力されないようになりますが、若干起動が遅くなったりなどする可能性があるので、特に必要なければそのままで問題ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) パソ粥が壊れてしまい。 新しく買ったパソコンに Amplitued5 Max をダウンロードインスト 1 2022/05/22 00:33
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- UNIX・Linux Chromebook Linux Extundeleteエラー 4 2022/07/03 17:20
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Windows 10 プロファイルエラーについて 2 2022/12/16 09:31
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTサーバが公開できません・・...
-
WAN側からPINGが通りません
-
【NVR500】外部からFTP接続する...
-
8443番ポートって?
-
tracert コマンドが必ずtime out
-
pcAnywhere、これで本当にリモ...
-
BIG-IPのルーティングについて
-
ポート開放をしたいのですが・・・
-
FTPサーバー立時、NTTモデムNVI...
-
8000番や8080番のポー...
-
パソコンの「ローカル」って、...
-
ポート80、443を開けろと言われ...
-
Windows10におけるUSB-RS232C機...
-
スイッチのポート番号について
-
ftpサーバー 接続できない
-
Ciscoルータ(1712)のIPアドレ...
-
PINGが通るのにネットワー...
-
Windows10でUDPのポート解放が...
-
HTTP以外のプロトコルについて
-
インターネット接続できません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pcAnywhere、これで本当にリモ...
-
tracert コマンドが必ずtime out
-
メッセンジャーソフト(LAN...
-
ネットワークカメラのDDNS設定...
-
WAN側からPINGが通りません
-
Wake On LANが不安定・出来ない
-
VNCで、WEBブラウザで操...
-
BIG-IPのルーティングについて
-
FTPサーバ(FileZilla server)...
-
8443番ポートって?
-
postfixが起動できない
-
PHPメール送信エラー
-
NTT Web caster V130でのVPN
-
iphoneでvpn接続できない
-
ファイヤーウォールの種類
-
gethostbynameを使うとエラーが...
-
ポートの開放
-
ルター BUFFALOの WZR-G54 へ外...
-
Ciscoルータに接続したDHCP ser...
-
ルータ(BA8000PRO)について
おすすめ情報