none
ソケット通信での「サーバIP」とは何でしょうか。 RRS feed

  • 質問

  • .NET2005 VISTA MFC です。

     

    ソケット通信の勉強をはじめ、ネットで解説しているサイトを見つけ、そのとおりにアプリケーションを作ってみました。

    一つのマシンで送受信双方のアプリを動かした場合については、通信に成功しました。

    しかし、「サーバIP」が分かりません。

     

    そのサイトでは、

     

    > 次にクライアント側はサーバIPを指定します。同一コンピュータの場合は、マシンのIPを指定するか、"localhost"とします。

     

    となっていて、該当するコードは、

     

    if (!err) if (!sock.Connect(severIP, port)) err = 1;

     

    だと思います。(severIPはCString型)

     

    ひとつのマシンで、severIP = "localhost" または "127.0.0.1" にした場合は送受信できます。

    ("127.0.0.1" は、別なサイトにあり、なんだか見覚えがあったので試したら、通信できました)

     

    しかし、「マシンのIP」や「サーバIP」は、どこで調べたらいいのか分かりません。

    電子メールのヘッダにあるIPや、自分のホームページに自分でアクセスした時にログで出てくるIPを試してみましたが、

     

    「対象のコンピュータによって拒否されたため、接続できませんでした。」

     

    というメッセージが出ます。

     

    「マシンのIP」や「サーバIP」はどこを見たら、知ることができるのでしょうか。

     

    アドバイスをお願いいたします。

    2007年8月24日 20:28

すべての返信

  • 通常、通信相手はサーバのIPよりも名前を指定します。たとえば www.microsoft.com  であるとか。通信したいクライアント側は通信したいサーバの名前を知っているか、指定します。

     

    ここでサーバの名前をIPアドレスに変換するのはDNSサーバであったり、ローカルな環境の場合はWindowsのブロードキャストであったりします。メール中に出てくるようなサーバマシンはメールの送受信をはじめ特定のポートの接続しか許可していない場合があるので、不特定のポート(何番か書かれていないのでわかりませんが)からの接続を拒否する設定になっているものが多いと思います。

     

    特にWebで公開されているようなソケット通信のサンプルプログラムであれば、その相手をしてくれるようなサーバを公開しているところはないでしょう。

     

    ちなみにIPアドレスを知りたい場合、Windowsであれば、コマンドプロンプトからnslookupコマンドを使用します。

    2007年8月25日 4:46
  • KKamegawaさん、ありがとうございます。

     

    いろいろやってみたのですが、ご指摘の通り、うまくいきませんでした。

     

    私は、プロバイダは、ニフティと契約しているのですが、要は、サーバと接続する際に、IDやパスワードも送らないとつながらない、

    という理解でよろしいのでしょうか。

     

    そうだとした場合、お手数ですが、IDやパスワードを送る関数や書式を教えて頂くことはできませんでしょうか。

    サイトを探しているのですが、見つかりません。

     

    また、サーバーの名前は、POPサーバ名や、SMTPサーバ名でよろしいのでしょうか。

    それとも、「接続先DNSのIPアドレス」でしょうか。

     

    アドバイスをお願いいたします。

    2007年8月25日 8:40
  • 違います。NiftyなどのISPとは接続した状態での話です。Niftyに接続する形態がダイヤルアップであればまた前段階の処理を書かなくてはなりませんが、それはWinSockではサポートされない領域です。

     

    ごえもんさんはいったい何の処理を作りたいのでしょうか?「ソケット処理」ではなく、「メールを送る処理を作りたい」とか「Webサーバからデータを取得したい」とか、「メールの取り込みをしたい」とか、いろいろあると思います。

     

    その参考にしたというサイトに書いていなかったのでしょうか?(この処理はどういう処理ですと言う話)

    2007年8月25日 9:51
  • KKamegawaさん、ありがとうございます。

     

    最終的には、メーラーを自作したい(添付ファイル付きメールの送受信をしたい)のですが、その下準備としてソケット通信を勉強しようとして、煮詰まりました。

    もし、メールの送受信がソケット通信とは全く別ということであれば、私は、スタート時点で間違っていた、ということになります。

     

    現在すでにnMailというフリーのDLLを利用した自作メーラーを使っているのですが、次は完全自作と思いました。

     

    サーバ名に、ニフティから知らされているPOPサーバ名や、SMTPサーバ名を入れて実行すると、

     

    「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」

     

    というエラーになります。

    「接続済み」となっているので、「接続はしたけれど、パスワードがないので拒否された」のかと思いました。

     

    根本的に「勘違い」していますでしょうか。

     

    アドバイスをお願いします。

     

    2007年8月25日 11:20
  • 回答と言うよりアドバイスです。

    メーラーを自作したいのでソケット通信の勉強をしているとの事ですが

    先にメールのやりとり(POPやSMTP)の勉強をした方が理解が早いと思います。

    具体的にはメーラーが自動で行っている作業を

    telnetを使って手動でメールの送受信を行います。

    これができれば手作業で打ち込んだコマンドをプログラムで書き直すという作業になるため

    イメージしやすくなると思います。

     

    例:

    1.コマンドプロンプトを起動

    2.telnet [POPサーバー名] 110  ← telnetを使ってPOPサーバーに接続

    3.正常に接続されればサーバーからOKメッセージが返ってくる

    4.USER [ユーザー名]  

    5.PASS [パスワード]

    6.LIST  ← メールがたまっていれば件数が返ってくる

    2007年8月27日 11:47
  • 勘違いと言うよりも必要な情報を調べ切れていないと言うのが正確なところかと。
    通信を行う為の手段としてソケット通信を使うと言うのは間違っていませんけれど、
    それだけでは通信する為の道が用意できたと言うだけです。
    その道の上で実際にSMTPサーバーやPOPサーバーと情報のやり取りをする為の
    プロトコル(通信手順)と言うものを理解していないとサーバーとのやり取りは成立しません。
    さらに、メールのやり取り上でSMTPサーバーやPOPサーバーがどういう役割を果たしているのか

    と言う部分もちゃんと理解しておく必要があります。
    使われていたライブラリが何処までやってくれていたのかまではわかりませんけれど、

    処理の大部分をライブラリに頼っていたのであれば、かなり勉強し無いといけない部分が

    残っていると思います。

     

    2007年8月28日 7:06
  • C.Jhonさん、ありがとうございます。

     

    ネットで検索して、いろいろヒットしました。

    まだ結果が出ていないのですが、時間がかかりそうなので、先にアップしました。

     

    併せて、参考書のようなものも、買おうと思っています。

    都内の大きな本屋で一日がかりで探そうと思っているのですが、タイトルに「TCP/IP」とか「プロトコル」といった文字がある

    本を調べればいいのでしょうか。

     

    よろしくお願いいたします。

    2007年8月28日 7:12
  • PATIOさん、ありがとうございます。

     

    処理の99%以上を、ライブラリに頼っていました。

     

    今までも、右往左往しながら、少しづつ前に進んできたので、なんとかがんばります。

    2007年8月28日 11:35
  • 参考書としてはメールの送受信を行うプログラムが例として載っている本がいいですよね。

    そうなるとタイトルに「WinSock」などと書いてある本が良いかもしれません。

    WinSockを解説した本であれば例としてPOPクライアントが載っている可能性が高いです。

    (しかもWindowsでC言語が例になっていると思います。)

     

    基本が分かって物足りなくなってきたら「RFC」の本などもあると便利ですが

    使うのはまだ先です。

    2007年8月28日 12:07
  • 何処で見たのか忘れてしまいましたが、C.Johnさんが言われているように
    WinSock関連の本でメール関連のやり取りについて触れている本が

    あったと思います。

     

    具体的にハイパーターミナルを使ってサーバーとのやり取りを実際に行うような事が

    書かれた物もあったような気がします。(Web上だったかもしれませんが)

    WinSockの使い方が理解できたら、次はこの辺のやり取りの方法について勉強すると

    良いと思いますよ。

    Web上で探せば、結構ヒットすると思います。

    2007年8月29日 2:26
  • C.Johnさん、PATIOさん、ありがとうございます。

     

    今日、八重洲のブックセンターに行って、何冊か買ってきました。

    これから勉強します。

     

    2007年9月1日 9:12