お世話になっています。
今回、Skypeのようなチャットツールの簡易版(とりあえずテキストのやり取りが出来る程度)を製作しようと張り切っています。(夏休みですし)
ネットワークプログラミングをやるのはこれが初めてのようなものです。
さまざまなサイト様をめぐりながらプログラムを作っているのですが、
やはり分からないことだらけで困っています。
1:PCに接続できない
昔の環境は図1のような形だったのですが、現在、事情により図2のような環境になっています。
※リンク修正
http://www.holygate.jpn.org/Data/zu.jpg
図1の環境では普通にIPアドレスを指定するだけで接続できたのですが、
図2の環境ではそれだと接続できずにエラーが返ってきます。
エラーが返ってくるのは、connect関数です。
ただし、図2の環境でも、IPアドレスをローカルのもの(192.168.1.*)で、
192.168.1.4とすると接続できました。
ただ、これをネットワーク上のパソコンでやるときはどうしたらいいかがわかりません。
2:ソフト内で行われている処理と非同期通信
下のサイト様を拝見しながらやっていました。
http://yonex1.cis.ibaraki.ac.jp/~yoneku ... ure03.html
順序だてて詳しく説明してくださっているのですが、いまいちよく分からない部分があります。
今回の目標はチャットツールで、上のサイト様を見る限り、
ソフトひとつでクライアントとサーバーの機能を持っていないといけないと読み取れます。
また、常に相手からの応答を確認しないといけません。
とりあえず、常に相手からの応答の確認(非同期通信?)は、
WSAAsyncSelect関数を使うということで、
WSAAsyncSelect(ソケット関数の戻り値,hMainWnd,???,?)
と、半分はてなですが、
特に第三引数の値がいまいち分かりません。
おそらく、コールバック関数のdwMsgに値が返るようにするのかな?
と思っていますが、結局何を指定するのかが分かりません。
第四引数は、そのdwMsgにメッセージ(「接続してきた」や、「データが来た」など)を通知するものを指定するのだと思っています。
そして一番分からないのが、この関数をどのように使うのか。
関数を呼んで、そこからメッセージが来るまでずっとループさせておけばいいのでしょうか。
まったく分かっていなくて申し訳ないですが、ご存知の方、お分かりの方がいらっしゃいましたらご教示ください。
お願いします。
IPネットワーク通信プログラムを作成したい
IPネットワーク通信プログラムを作成したい
最後に編集したユーザー 水波形 [ 2011年8月06日(土) 18:46 ], 累計 1 回
>>昔の環境は図1のような形だったのですが、現在、事情により図2のような環境になっています。
この図からは、水波形さんの環境がわかりませんょ。
PCは複数台書いて、IP体系やルータの設定も必要です。
また絵中のネットワークって何を指しているのですか?、Pingは通りますか?、ルータのポートは開けていますか?、PCのファイヤウォールは大丈夫ですか??
>>特に第三引数の値がいまいち分かりません。
WSAAsyncSelectは使った事が無いので確かではありませんが、スレッドなどから呼び出さなければhMainWndで良いと思います。
>>関数を呼んで、そこからメッセージが来るまでずっとループさせておけばいいのでしょうか。
受信するとWindowsメッセージが飛んで来るので、UINTで指定したメッセージ(例えばWM_SOCKET)をGetMessageなどで取れば良いのでは。
この図からは、水波形さんの環境がわかりませんょ。
PCは複数台書いて、IP体系やルータの設定も必要です。
また絵中のネットワークって何を指しているのですか?、Pingは通りますか?、ルータのポートは開けていますか?、PCのファイヤウォールは大丈夫ですか??
>>特に第三引数の値がいまいち分かりません。
WSAAsyncSelectは使った事が無いので確かではありませんが、スレッドなどから呼び出さなければhMainWndで良いと思います。
>>関数を呼んで、そこからメッセージが来るまでずっとループさせておけばいいのでしょうか。
受信するとWindowsメッセージが飛んで来るので、UINTで指定したメッセージ(例えばWM_SOCKET)をGetMessageなどで取れば良いのでは。
ご返信ありがとうございます
Tako様、ご返信ありがとうございます。
どのようにしているのでしょうか。
おそらく、それが知りたくて探しているのだと思います。
普通にケーブルで、ネットワーク回線につないである部分のことです。
ネットワークには接続できています。
全くどのようにしたらいいのかが本当に分からないのです。
でも、ネットワーク系には触れてみたいので必死にサイトをめぐっています。
すいませんが、ご存知でしたらお手伝いください。お願いします。
図のほうがリンク切れになっているので、借りているサーバーにアップロードさせていただきます。
http://www.holygate.jpn.org/Data/zu.jpg
えっと、PCは本当に1台しかないんです。PCは複数台書いて
Skypeは、これを自動で設定しますよね。IP体系やルータの設定も必要です。
どのようにしているのでしょうか。
おそらく、それが知りたくて探しているのだと思います。
分かりにくくてすいません。また絵中のネットワークって何を指しているのですか?
普通にケーブルで、ネットワーク回線につないである部分のことです。
どこへのか分かりませんが、とりあえず通っていると思います。Pingは通りますか?
ネットワークには接続できています。
昔の環境では出来ていたので、あいていると思います。ルータのポートは開けていますか?
XPと7で、仕様が違うのでしたら分かりませんが、セキュリティー対策ソフトは同じものを使っています。PCのファイヤウォールは大丈夫ですか?
全くどのようにしたらいいのかが本当に分からないのです。
でも、ネットワーク系には触れてみたいので必死にサイトをめぐっています。
すいませんが、ご存知でしたらお手伝いください。お願いします。
図のほうがリンク切れになっているので、借りているサーバーにアップロードさせていただきます。
http://www.holygate.jpn.org/Data/zu.jpg
多くのアプリケーション同様に手動で設定するのが最も簡単と思います(というより、私なら諦めてそうしちゃいます)。つまり、ルータ(この場合はおそらく無線親)で「外のネットワークからTCP(またはUDP)何番宛に接続が来たら、パソコン192.168.1.*へ転送する」という、いわゆるNAPTとかIPマスカレードの設定を行うことです。
そんな設定をしなくても動くSkypeは「ホールパンチング」って結構高度な技を使っています。
http://www.itmedia.co.jp/enterprise/art ... 070_3.html
私もやったことないので実現するプログラム例は示せないですし、(すべての場合を網羅するには)中央サーバが必要な方法ので水波形さんの要件にもそぐわないと思います。
ホールパンチング以外に何か方法がないかというと、あと1つ心当たりがあります。上記のようなルータへの設定を自動的に行うUPnPという技で、これはWindows Live Messengerが使っています。UPnPも私はプログラミングであつかったことがないので詳細は知らないです。
あんまり前向きなことが言えなくてすみません。
そんな設定をしなくても動くSkypeは「ホールパンチング」って結構高度な技を使っています。
http://www.itmedia.co.jp/enterprise/art ... 070_3.html
私もやったことないので実現するプログラム例は示せないですし、(すべての場合を網羅するには)中央サーバが必要な方法ので水波形さんの要件にもそぐわないと思います。
ホールパンチング以外に何か方法がないかというと、あと1つ心当たりがあります。上記のようなルータへの設定を自動的に行うUPnPという技で、これはWindows Live Messengerが使っています。UPnPも私はプログラミングであつかったことがないので詳細は知らないです。
あんまり前向きなことが言えなくてすみません。
ご回答ありがとうございます
イグトランス様
解説などを拝見しましたが、まったくわかりません。
(超勉強不足)
こちらもつかったことがなく、まったくわかりません。
しかしご意見いただきありがとうございます。
とりあえず、UPnPを勉強していきたいと思います。
Tako様、イグトランス様
本当にありがとうございました。
なるほど・・・そんな設定をしなくても動くSkypeは「ホールパンチング」って結構高度な技を使っています。
http://www.itmedia.co.jp/enterprise/art ... 070_3.html
私もやったことないので実現するプログラム例は示せないですし、(すべての場合を網羅するには)中央サーバが必要な方法ので水波形さんの要件にもそぐわないと思います。
解説などを拝見しましたが、まったくわかりません。
(超勉強不足)
UPnPですか。ホールパンチング以外に何か方法がないかというと、あと1つ心当たりがあります。上記のようなルータへの設定を自動的に行うUPnPという技で、これはWindows Live Messengerが使っています。
こちらもつかったことがなく、まったくわかりません。
しかしご意見いただきありがとうございます。
とりあえず、UPnPを勉強していきたいと思います。
Tako様、イグトランス様
本当にありがとうございました。