VC++2005で作成したアプリケーションで
2台のPCを用いたWifi通信によるデータの送受信を行いたいです。
まだ、検討を始めたばかりで全く考えがまとまっていません。
漠然とで構いませんで、
どういった事を検討すべきか?
こういった知識が必要とか、
なんでも構いませんので教えて頂けないでしょうか?
宜しくお願いします。
うーーん、
Wifi通信ってPC用として何かI/F機器出回ってましたっけ?
それとも、携帯機器を経由して通信するとか?
まず、どのようにしてPC同士を通信させるかを考えないとだめですね。
WiFi っていうか、単に無線 LAN なだけぢゃないの?
インフラストラクチャモードだと有線と何一つ違わないよ
好きなプロトコルで好きに通信していい。
ftp や cifs(smb) つかうのがめんどくさくないと思うけど。
アドホックモードの接続を確立するのにユーザの介入をいらないようにしたい?
P2P で接続を受ける側のポートの FireWall をユーザーの介入なしに空けたい?
そんなセキュリティ無視なツールは有害だね。
1.Wi-Fiとは「Wi-Fi Alliance」が策定したもので、無線LANの相互接続を保証
するための、主にハードウエアの(試験の)規格です。
他、接続時のセキュリティの規格なども規定しています。
2.無線LANの規格はIEEE 802.11で規定されています。ハードウエアの規格です。
なので、
>2台のPCを用いたWifi通信によるデータの送受信を行いたいです。
を翻訳すると、
「2台のPCを無線LANを用いてデータの送受信を行う」
ということになります。んで、
ドライバ等を除く通常のWindowsアプリケーションにおいては、LANの通信は、
TCP/IPで行うので、有線LAN通信と無線LAN通信の区別はありません。
また、TCP/IPによる通信のプログラムは一般に socket を使用することに
なります。従って
「2台のPCをTCP/IPを用いてデータの送受信を行う」
になるかと思います。さて、Wi-Fiを想定しているという原点に立ち戻れば
アドホック、つまりPC間の直接通信は、除外されると考えても良いと思われるので、
必ずサーバー経由の通信と解釈できます。最終的には
「2台のPCをTCP/IPを用いてサーバーを介したデータの送受信を行うための
サーバー用アプリケーションとクライアントアプリケーションを作成する。
ただし無線LANでの接続を前提とする」
となるかもしれません。
みなさんがおっしゃっているとおり、「Wifi通信によるデータの送受信」では
漠然としすぎです。
もう少し、詳しく話してみましょう。
違った答が得られるかもです。
>こういった知識が必要とか、
>どういった事を検討すべきか?
>なんでも構いませんので教えて頂けないでしょうか?
何をしたいのかにもよります。接続が確立した状態なら
普通のTCP/IP通信でしょう。
無線LANを制御したいならXP以降であればAPI群があります。(使った事ありませんが)
「Wireless Zero Configuration」
この辺から調べていくと良いかもしれません。
もっと突っ込むなら(WindowsCE/mobile)
無線LANの電波強度の取得
http://www.mobileware.jp/index.php/%E7%84%A1%E7%B7%9A%EF%BC%AC%EF%BC%A1%EF%BC%AE%E3%81%AE%E9%9B%BB%E6%B3%A2%E5%BC%B7%E5%BA%A6%E3%81%AE%E5%8F%96%E5%BE%97
こういう話だと、面倒というか資料があまりありません。
沢山のコメントありがとうございます。
お返事が遅くなりすみません。
>「2台のPCをTCP/IPを用いてサーバーを介したデータの送受信を行うための
> サーバー用アプリケーションとクライアントアプリケーションを作成する。
> ただし無線LANでの接続を前提とする」
仰る通りです。但し、1点だけ
「インターネットの接続は行わず、2台のPC間でのみ通信を行う」
といった内容を行いたいんです。
---------------------------
>無線LANを制御したいならXP以降であればAPI群があります。(使った事ありませんが)
>「Wireless Zero Configuration」
>この辺から調べていくと良いかもしれません。
>もっと突っ込むなら(WindowsCE/mobile)
>無線LANの電波強度の取得
>
http://www.mobileware.jp/index.php/%E7%84%A1%E7%B7%9A%EF%BC%AC%EF%BC%A1%EF%BC%AE
>%E3%81%AE%E9%9B%BB%E6%B3%A2%E5%BC%B7%E5%BA%A6%E3%81%AE%E5%8F%96%E5%BE%97
>こういう話だと、面倒というか資料があまりありません。
非常に参考になります。
上記のAPIやサンプルなどで、サーバー側からクライアントを検索する機能も
作成出来るんでしょうか?
探してみます。
---------------------------
TCP/IPのデータ通信について
今、分かりやすいサンプル等を探していますが、
何かお勧めのサイト等ございましたら、教えて頂けませんか?
以上、宜しくお願いします。
用語が整理されていないというか、わかってないから不適切な用語になってるというか
> 「インターネットの接続は行わず、2台のPC間でのみ通信を行う」
この「インターネット」あるいは「インターネットの接続」という文言を、
どういう意味で用いているの? Wi-Fi とインターネットは話の次元が違う。
Wi-Fi っつことは [無線] なわけだが、
・無線 PC 同士を直接接続する (DS/PSP の直結対戦) のであれば、
それは「アドホック接続」を行うことに該当する。
・無線 PC 同士をある1つのアクセスポイントに接続するのであれば
それは「インフラストラクチャ接続」に該当する
(※アクセスポイントが外部ネットワークにつながっていなくて良い)
インフラストラクチャ接続だろうがアドホック接続だろうが LAN が構築された後は
どっちかがサーバ、どっちかがクライアントになって接続しあうだけの話。
いわゆるインターネットサーバクライアントの解説と何一つ違わない。
Peer to Peer の解説書とかも役に立つと思うぞ。
アドホック接続を行う際にはセキュリティ的考察が必須なので
(適当に近くにあるPC同士が勝手に通信してよいわけが無い)
まずはその辺の理解から。
想定しているのは、ローカルLAN内でIPメッセンジャーみたいなもので
お話しするとか、そういう感じですか?
[IPメッセンジャー]
http://www.forest.impress.co.jp/lib/inet/msgchat/messenger/ipmsg.html
>いわゆるインターネットサーバクライアントの解説と何一つ違わない。
非常に勉強になります。ネットワーク基本技術の習得が必要ですね、これは。。
因みに今回のは「アドホック接続」です。
>想定しているのは、ローカルLAN内でIPメッセンジャーみたいなもので
>お話しするとか、そういう感じですか?
はい、ソフト的にはこんな感じです。
ただ、ネットワークとしては
クライアントとサーバーの関係を持たせなきゃいけないところが違います。
因みにインフラストラクチャ接続やアドホック接続する基本部分を、
VC++で実装するのは簡単でしょうか??
例えば
http://d.hatena.ne.jp/j-ishii/20091206/1260120531
使った事無いから質問されても答えられないけど。
使った検索ワードはこれ「Wireless Zero Configuration 電波強度」
私はCEの探索しているのでこのAPI達には興味ありません。
サンプル言わないでもう少し調べてみてもいいんじゃない?
キーワード次第で他にも探せるかもしれません。
要するに仕事として2つのストーリーがあって
1. Wi-Fi で LAN を構築する
2.構築済み LAN 上にて目的とする機能を実装する
1と2は話がまったく別。
1ができても2には無関係だし、2を実装するには無線でなくてもよい。
1.
無線接続って誰に傍受されるかわからない(盗聴と傍受は違う)こと、
無線機能が有効であっても (Adhoc に) 勝手に接続されてはたまらないこと、
PSK をどう安全に保存すべきか、
などなど、プログラムの実装に移る前に理解しておかなければならないことが
山盛りあるので、そこからはじめないとならないぞ。前提知識なしで実装すると
「セキュリティ無視有害ソフト」に認定されかねない。
Wi-Fi 関連 API 資料なら
http://msdn.microsoft.com/en-us/library/ms706556(v=VS.85).aspx
2.
httpd/dhcpd/named/wins など集中サーバがいない adhoc LAN 上で
どのマシンがサーバになるのか?
IP アドレス/マシン名を誰がどのように提供するのか?
接続すること・されることを認めたり認めなかったりセキュリティをどう担保するか?
FireWall をどう維持管理するのか?
などなど adhoc LAN 上で何かするってのは意外に面倒/困難/危険を伴う。
先は長そうだね・・・まあがんばってくれ。
うーーん、
ただ単にWi-Fiの無線LANを使ったLAN接続だったら、それぞれの機器の説明の読んで
セットアップして通常のソケット通信をすればいいと思います。
>因みに今回のは「アドホック接続」です。
こちらを使うのだとかなり難しいようですね。
先ほどべろさん紹介のサイトのぞいて見たら「DeviceIoControl()」使ってましたね。
Wi-Fiの電波強度等、無線LAN通信のステータスを調べるためには、直接ドライバー
からステータスをもらうしかないみたいですね。
ということは、どんなWi-Fi機器を使うのか?
それによってソフトも対応しなければならない。
ということですね。
あと、単に会社のWi-Fiの無線LAN機器の開発・試験のためならいいのですが、
運用ソフトとして考えているのならば、tetrapodさんの意見にある、セキュリティーの
問題がありますね。
OSでもチェックしているみたいだし、ウイルス対策ソフトでも検索の対象に入れて
いるのも多いです。(ウイルスバスターは選択でできるようになっていますね。)
tetrapodさんのいうFireWall等をOSやウイルス対策ソフトに任せるとしても、
にあったソフトにしないと逆にFireWall等をひっかかって通信ができなく
なる可能性もありますね。
修正です。
ココカラ ---------
tetrapodさんのいうFireWall等をOSやウイルス対策ソフトに任せるとしても、
それらの条件にあったソフトにしないと逆にFireWall等にひっかかって通信が
できなくなる可能性もありますね。
-------------- ココマデ
です。
>使った検索ワードはこれ「Wireless Zero Configuration 電波強度」
>サンプル言わないでもう少し調べてみてもいいんじゃない?
このWindowsサービスをうまく使う事も可能かもしれませんね。
>1. Wi-Fi で LAN を構築する
NativeWifiを用いてパスワードなどでセキュリティを高める形で簡単にいかないでしょう
か?
>2.構築済み LAN 上にて目的とする機能を実装する
ここは非常に難しいですね。。。
単にインターネット接続していないPC同士の通信って訳にはいかないでしょうか。。。
>tetrapodさんの意見にある、セキュリティーの問題がありますね。
>tetrapodさんのいうFireWall等をOSやウイルス対策ソフトに任せるとしても、
>それらの条件にあったソフトにしないと逆にFireWall等にひっかかって通信が
>できなくなる可能性もありますね。
この辺はネットワーク関連のソフト開発では必須になるかと思います。
皆さんはどのような対応で回避しているのでしょうか。。。?