質問者
ソケット通信での「サーバIP」とは何でしょうか。

質問
-
.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」はどこを見たら、知ることができるのでしょうか。
アドバイスをお願いいたします。
すべての返信
-
通常、通信相手はサーバのIPよりも名前を指定します。たとえば www.microsoft.com であるとか。通信したいクライアント側は通信したいサーバの名前を知っているか、指定します。
ここでサーバの名前をIPアドレスに変換するのはDNSサーバであったり、ローカルな環境の場合はWindowsのブロードキャストであったりします。メール中に出てくるようなサーバマシンはメールの送受信をはじめ特定のポートの接続しか許可していない場合があるので、不特定のポート(何番か書かれていないのでわかりませんが)からの接続を拒否する設定になっているものが多いと思います。
特にWebで公開されているようなソケット通信のサンプルプログラムであれば、その相手をしてくれるようなサーバを公開しているところはないでしょう。
ちなみにIPアドレスを知りたい場合、Windowsであれば、コマンドプロンプトからnslookupコマンドを使用します。
-
KKamegawaさん、ありがとうございます。
いろいろやってみたのですが、ご指摘の通り、うまくいきませんでした。
私は、プロバイダは、ニフティと契約しているのですが、要は、サーバと接続する際に、IDやパスワードも送らないとつながらない、
という理解でよろしいのでしょうか。
そうだとした場合、お手数ですが、IDやパスワードを送る関数や書式を教えて頂くことはできませんでしょうか。
サイトを探しているのですが、見つかりません。
また、サーバーの名前は、POPサーバ名や、SMTPサーバ名でよろしいのでしょうか。
それとも、「接続先DNSのIPアドレス」でしょうか。
アドバイスをお願いいたします。
-
KKamegawaさん、ありがとうございます。
最終的には、メーラーを自作したい(添付ファイル付きメールの送受信をしたい)のですが、その下準備としてソケット通信を勉強しようとして、煮詰まりました。
もし、メールの送受信がソケット通信とは全く別ということであれば、私は、スタート時点で間違っていた、ということになります。
現在すでにnMailというフリーのDLLを利用した自作メーラーを使っているのですが、次は完全自作と思いました。
サーバ名に、ニフティから知らされているPOPサーバ名や、SMTPサーバ名を入れて実行すると、
「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」
というエラーになります。
「接続済み」となっているので、「接続はしたけれど、パスワードがないので拒否された」のかと思いました。
根本的に「勘違い」していますでしょうか。
アドバイスをお願いします。
-
回答と言うよりアドバイスです。
メーラーを自作したいのでソケット通信の勉強をしているとの事ですが
先にメールのやりとり(POPやSMTP)の勉強をした方が理解が早いと思います。
具体的にはメーラーが自動で行っている作業を
telnetを使って手動でメールの送受信を行います。
これができれば手作業で打ち込んだコマンドをプログラムで書き直すという作業になるため
イメージしやすくなると思います。
例:
1.コマンドプロンプトを起動
2.telnet [POPサーバー名] 110 ← telnetを使ってPOPサーバーに接続
3.正常に接続されればサーバーからOKメッセージが返ってくる
4.USER [ユーザー名]
5.PASS [パスワード]
6.LIST ← メールがたまっていれば件数が返ってくる
-
勘違いと言うよりも必要な情報を調べ切れていないと言うのが正確なところかと。
通信を行う為の手段としてソケット通信を使うと言うのは間違っていませんけれど、
それだけでは通信する為の道が用意できたと言うだけです。
その道の上で実際にSMTPサーバーやPOPサーバーと情報のやり取りをする為の
プロトコル(通信手順)と言うものを理解していないとサーバーとのやり取りは成立しません。
さらに、メールのやり取り上でSMTPサーバーやPOPサーバーがどういう役割を果たしているのかと言う部分もちゃんと理解しておく必要があります。
使われていたライブラリが何処までやってくれていたのかまではわかりませんけれど、処理の大部分をライブラリに頼っていたのであれば、かなり勉強し無いといけない部分が
残っていると思います。