- ベストアンサー
C++でsocketプログラミングを行う際の接続エラー「No route to host」の解決方法
- C++でsocketの練習のためにサーバクライアントプログラムを作成したが、クライアントがサーバへの接続で「No route to host」というエラーメッセージが表示される。
- サーバを起動させている状態で「telnet localhost 9999」とすると正しく接続できるが、localhost当てに接続しようとすると接続できない。
- localhostで接続する場合は特別なソケット操作が必要になる可能性がある。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
localhostではなく、127.0.0.1ではどうでしょうか? localhostは127.0.0.1の別名ですが、自分でプログラムをおつくりになっているのなら、localhostという文字列をIPアドレスに変換する作業をしないといけないと思うのですが。 telnetはlocalhostでいくようですので、おそらく、そこの問題なのではないかと思います。
その他の回答 (2)
- rasuxo
- ベストアンサー率66% (6/9)
素朴な疑問なのですが 同一PC上に、サーバとクライアントが同居しているんですよね? ポート番号をクライアント側とサーバ側で別けてみてはどうでしょうか? 同じポートリソースを使おうとしていることが原因かも あと、UDPですか?TCPですか? 恐らくTCPでしょうか?
補足
ポートを空けて待っているのはサーバ側だけです。 サーバは9999で待ち受け、クライアントが9999にアクセスしにいくという具合です。 TCPを使用してソケット作成を行っていました。 こちらも説明不足ですいませんでした。 いろいろと調べたり手探りでソースを変えたりして無事解決することが出来ました。 どうもありがとうございました!
- terra5
- ベストアンサー率34% (574/1662)
ネットワークに接続されていないことで、必要なサービス、デーモン類が動いていないような気がします。 単独で動作させたというのは、どのようなOS,マシンでどうやって実行させたのでしょうか。 多分、ケーブルを外したマシンで単独で動かすなら動くと思いますが。
補足
ご返答有難うございます。 始めはネットワーク整備がなされた学校でのSolarisを用い、単一コンピュータ上でサーバ/クライアントの同時起動と正常動作を確認しました。 のちにFreeBSDで動作確認を行ったところ上記のような不具合が起こってしまいました。 説明不足で申し訳ありません。 いろいろと調べ、手探りでソースを変更した結果、どうやらSolaris上ではポート番号をhtons(port)としなくても動作するようでした。 その点でFreeBSDでは不具合が生じていたようです。 どうもありがとうございました!
補足
回答ありがとうござます。 投稿したあとに追記し様と思ったのですが、できずに・・・ 127.0.0.1で試したのですが、 localhostでは「No route to host」 127.0.0.1では「Connection refused」 自IPを192.168.1.2にして接続しようとして「Connection refused」 上記だけはプログラムミスだと思うのですが、 ネットワークにつなげた192.168.1.3のクライアントから自IP192.168.1.2のサーバに接続するときちんとつながり動作します。 不思議なのですが、どのような対処法があるのでしょうか?