ab.com コミュニティ
https://www.activebasic.com/forum/

IPネットワーク通信プログラムを作成したい
https://www.activebasic.com/forum/viewtopic.php?t=2689
ページ 11

作成者:  水波形 [ 2011年8月03日(水) 02:55 ]
記事の件名:  IPネットワーク通信プログラムを作成したい

お世話になっています。

今回、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にメッセージ(「接続してきた」や、「データが来た」など)を通知するものを指定するのだと思っています。

そして一番分からないのが、この関数をどのように使うのか。
関数を呼んで、そこからメッセージが来るまでずっとループさせておけばいいのでしょうか。


まったく分かっていなくて申し訳ないですが、ご存知の方、お分かりの方がいらっしゃいましたらご教示ください。
お願いします。

作成者:  Tako [ 2011年8月06日(土) 14:47 ]
記事の件名: 

>>昔の環境は図1のような形だったのですが、現在、事情により図2のような環境になっています。

この図からは、水波形さんの環境がわかりませんょ。
PCは複数台書いて、IP体系やルータの設定も必要です。
また絵中のネットワークって何を指しているのですか?、Pingは通りますか?、ルータのポートは開けていますか?、PCのファイヤウォールは大丈夫ですか??


>>特に第三引数の値がいまいち分かりません。
WSAAsyncSelectは使った事が無いので確かではありませんが、スレッドなどから呼び出さなければhMainWndで良いと思います。

>>関数を呼んで、そこからメッセージが来るまでずっとループさせておけばいいのでしょうか。
受信するとWindowsメッセージが飛んで来るので、UINTで指定したメッセージ(例えばWM_SOCKET)をGetMessageなどで取れば良いのでは。

作成者:  水波形 [ 2011年8月06日(土) 18:45 ]
記事の件名:  ご返信ありがとうございます

Tako様、ご返信ありがとうございます。
引用:
PCは複数台書いて
えっと、PCは本当に1台しかないんです。
引用:
IP体系やルータの設定も必要です。
Skypeは、これを自動で設定しますよね。
どのようにしているのでしょうか。
おそらく、それが知りたくて探しているのだと思います。
引用:
また絵中のネットワークって何を指しているのですか?
分かりにくくてすいません。
普通にケーブルで、ネットワーク回線につないである部分のことです。
引用:
Pingは通りますか?
どこへのか分かりませんが、とりあえず通っていると思います。
ネットワークには接続できています。
引用:
ルータのポートは開けていますか?
昔の環境では出来ていたので、あいていると思います。
引用:
PCのファイヤウォールは大丈夫ですか?
XPと7で、仕様が違うのでしたら分かりませんが、セキュリティー対策ソフトは同じものを使っています。


全くどのようにしたらいいのかが本当に分からないのです。
でも、ネットワーク系には触れてみたいので必死にサイトをめぐっています。
すいませんが、ご存知でしたらお手伝いください。お願いします。


図のほうがリンク切れになっているので、借りているサーバーにアップロードさせていただきます。
http://www.holygate.jpn.org/Data/zu.jpg

作成者:  イグトランス [ 2011年8月07日(日) 00:39 ]
記事の件名: 

多くのアプリケーション同様に手動で設定するのが最も簡単と思います(というより、私なら諦めてそうしちゃいます)。つまり、ルータ(この場合はおそらく無線親)で「外のネットワークからTCP(またはUDP)何番宛に接続が来たら、パソコン192.168.1.*へ転送する」という、いわゆるNAPTとかIPマスカレードの設定を行うことです。

そんな設定をしなくても動くSkypeは「ホールパンチング」って結構高度な技を使っています。
http://www.itmedia.co.jp/enterprise/art ... 070_3.html
私もやったことないので実現するプログラム例は示せないですし、(すべての場合を網羅するには)中央サーバが必要な方法ので水波形さんの要件にもそぐわないと思います。

ホールパンチング以外に何か方法がないかというと、あと1つ心当たりがあります。上記のようなルータへの設定を自動的に行うUPnPという技で、これはWindows Live Messengerが使っています。UPnPも私はプログラミングであつかったことがないので詳細は知らないです。

あんまり前向きなことが言えなくてすみません。

作成者:  Tako [ 2011年8月07日(日) 09:36 ]
記事の件名: 

>>えっと、PCは本当に1台しかないんです。

であれば、どちらの系統でも127.0.0.1で大丈夫だと思います。

>>Skypeは、これを自動で設定しますよね。
>>どのようにしているのでしょうか。

ネットワークの本を何冊か読破してスキルアップしてくださいとしか言い様がありません。
まずは、ルータなどを超えないシンプルな状態から初めるべきだと思います。

作成者:  水波形 [ 2011年8月26日(金) 00:58 ]
記事の件名:  ご回答ありがとうございます

イグトランス様
引用:
そんな設定をしなくても動くSkypeは「ホールパンチング」って結構高度な技を使っています。
http://www.itmedia.co.jp/enterprise/art ... 070_3.html
私もやったことないので実現するプログラム例は示せないですし、(すべての場合を網羅するには)中央サーバが必要な方法ので水波形さんの要件にもそぐわないと思います。
なるほど・・・
解説などを拝見しましたが、まったくわかりません。
(超勉強不足)

引用:
ホールパンチング以外に何か方法がないかというと、あと1つ心当たりがあります。上記のようなルータへの設定を自動的に行うUPnPという技で、これはWindows Live Messengerが使っています。
UPnPですか。
こちらもつかったことがなく、まったくわかりません。


しかしご意見いただきありがとうございます。
とりあえず、UPnPを勉強していきたいと思います。

Tako様、イグトランス様
本当にありがとうございました。

作成者:  kobo [ 2011年10月03日(月) 23:57 ]
記事の件名:  参考に

時間がないのでコードやらを追いかけてはいないのですが
2年程前くらいからソケットについて勉強しており
よく参考になった本があります。
もちろんこちらの方にもコードを載せてお世話にもなりました。
ちょっと高いですが、
Winsock2 プログラミング ルイス・ナッパー著
ISBN4-7973-3044-9
です。
色々分ることがありましたので良かったらご覧下さい。

作成者:  水波形 [ 2011年11月25日(金) 10:08 ]
記事の件名: 

>kobo様
返信遅くなってもすいわけありません。
紹介していただいた本を探しまわったのですが、
もう出回っていないようです><
古本屋にも探しに行こうと思います。

ありがとうございました

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/