はじめまして、どうしてもわからないのでよいアドバイスをお願いします。
ただいま、IPメッセンジャーを作ろうとしています。UDPのブロードキャストを使っ
て、相手先のマシンが動いているかを判断したいのですが、方法がわかりません。
何か参考のできるサイトはありますか?
環境は、windowsXP,言語はVC++.net, MFCは使用していません。
相手に受け取ったら返事を投げ返してもらって
一定時間内に一度も応答がなければ動いていないと判断するとか
返答ありがとうございます。
相手に受け取ったら返事投げ返してもらうということなんですが、
具体的にプログラムソースとして、どんなことをすればよろしいのでしょうか?
なにぶん勉強不足で、申し訳ありません。
よろしくお願いします。
具体的にプログラムソースを書く前に
具体的な仕様をきめましょう。
IPメッセンジャーを使って相手にメッセージを送るために、相手のマシンが動いてい
たら、相手のIPアドレスとホスト名を表示させるようにしたい。動いていなければ、表
示しないようにしたいです。
> 表示しないようにしたいです。
「したいです」というのは、要求ですね。
それを元に「どのようにするか」が仕様、そして仕様を決めるのが設計。
これがプログラマ(SEとか別のなで呼ぶ人もいますが)のするべき作業であり、
cho0 さんの後でのお楽しみです。
ソースうんぬんは、少なくともどうやるか(仕様)が決まった後の話です。
詳しい人に実現の可否とかもろもろ相談するのはいいことですが、
設計もせずにいきなりソースの書き方を聞いてしまうのでは設計を放棄していますし、
勉強不足は解消されません。
表示させるために、UDPのブロードキャストを使い、相手にバケットが届いたら相手のIP
アドレスとホスト名を返してもらい、それを送った方にそのホスト名を表示させる。
相手にパケットが届かなかったら、送った方にはなにも表示されない。
ちょっとだけ。
> ソースうんぬんは、少なくともどうやるか(仕様)が決まった後の話です。
仕様を決める前(設計をする前)に技術調査ってフェイズがあったりもします。
時間がないと大抵は設計と一緒になっちゃうんですけどね^^;
cho0さんの場合は、
技術調査と設計をすっ飛ばして実装だけしか考えてないって状況です。
まずはUDP/IPの特性を理解するというあたりから手をつけたほうが自身のためになりま
す。
その上で実装で判らないことがあれば相談してみてください。
> 送った方にはなにも表示されない。
表示非表示とおっしゃっていますが、それはどの画面に対してでしょうか?
> UDPのブロードキャストを使い
を行うタイミングは?
方針が決まったのでしたら、
実装するのに必要な具体的な仕様をきめましょう。
決める内容の例:ポート番号、パケットのフォーマット、etc.
IPメッセンジャーを立ち上げたとき(最初の画面)に、相手先のパソコンが同じものを
立ち上げているかどうかです。 立ち上げていなければ非表示、立ち上げていれば、相
手のホスト名を表示させる。
UDPを使うタイミングは、IPメッセンジャーを立ち上げたときです。
やりたいことをもっと細分化して詳細を決定していきましょう。
例えば
>IPメッセンジャーを立ち上げたとき(最初の画面)に、相手先のパソコンが同じものを
>立ち上げているかどうかです。 立ち上げていなければ非表示、立ち上げていれば、相
>手のホスト名を表示させる。
これは以下のようになります。
1)IPメッセンジャーを立ち上げる。
2)UDPブロードキャストで相手の状態を調べる
3)2)の結果、ホスト名を画面に表示
さらに細分化すると
1) IPメッセンジャーを立ち上げる。
1-1) メインWindowの作成
1-2) 必要なコントロールの作成と配置
2) UDPブロードキャストで相手の状態を調べる
2-1) UDPソケットの作成(WindowsであればWinSockの初期化を含む)
2-2) ブロードキャストに必要なデータを作る
2-3) 定められたシーケンスで相互通信を行う
3) 2)の結果を画面に表示
3-1) 2)の結果を保持しているデータを読み込む
3-2) フォーマットしてホスト名を画面に出力
といった感じになります。
こんな感じでどんどん細分化して設計を行っていきましょう。
そうしていけば自ずとREEさんのおっしゃっている
> 決める内容の例:ポート番号、パケットのフォーマット、etc.
といった事柄も決めなければならなくなっていきます。
特定の相手が生きてるかじゃなくて不特定多数のクライアントの生存確認なら
↓こんなのとか
各々が定期的にブロードキャストで生存通知パケットを投げて、
それを受け取ったクライアント側は通知の来たマシンを一覧として列挙してリスト表示す
る。
一定時間以上生存通知パケットが来ないクライアントは終了されたとみなしてリストから
削除する。
クライアント数が増えたら大変だろうけど…
2) UDPブロードキャストで相手の状態を調べる
2-1) UDPソケットの作成(WindowsであればWinSockの初期化を含む)
2-2) ブロードキャストに必要なデータを作る
2-3) 定められたシーケンスで相互通信を行う
3) 2)の結果を画面に表示
3-1) 2)の結果を保持しているデータを読み込む
3-2) フォーマットしてホスト名を画面に出力
3-3) ホスト名をリストボックスの中にいれる
4) 相手に送信する
4-1 3)のあて先を選ぶ
4-2 メッセージを入力する
4-2-1 エディタボックスに書き込む
4-3 TCP/IPを利用して、相手にメッセージを送る
4に関してはほとんどできています。
なんとか解決できました。どうもありがとうございました。