![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
中を見ていただき、ありがとうございます。
VB6.0を使い、できるだけ簡単にチャットソフト(のようなものでも可)を作りたいと考えています。
機能といたしましては、以下のものを備えているものです。
・複数人、たとえば9名が同時にメッセージを交換できる
・その9人を3人ずつのグループに分け、それぞれのグループ内だけでもメッセージを交換できる
・グループ内だけのメッセージ交換か、全体とのメッセージ交換かは、ボタン1つで切り替えられる(もしくは、1画面内に複数のメッセージボードがあり、それぞれがグループ用、全体用などとなっている)
これまで自分なりに集めた情報といたしましては、以下のものがあります。
(1)VB6.0でこれを実装するには「mapiコントロール、winsockコントロール、その他ネットワーク用のAPIを使わなければならない(Visual Basic 6.0 300の技 ネットワーク+データベース編 より)」
(2)「ファイル共有を利用した、チャットもどき程度であれば、簡単に作れるかも(VB初心者友の会:http://www.gizcollabo.jp/vbtomo/log/archive/haji … より)」
(3)VB.NETであれば「ソケットプログラミング」というものを用いて、比較的簡単に実装できるらしい(http://www.amazon.co.jp/Visual-Basic%E3%81%A7%E3 … より)
(1)から考えますと、VB6.0でチャットソフトを作るのは比較的難度が高そうで、正直なところ腰が引けています。
また、(2)が比較的簡単な設定でできるのであれば魅力を感じていますが、ファイル共有を行ったことがないので「共有も難しそうだ」という先入観があり、これも腰が引けています。
(3)は(単に食わず嫌いですが)、VB.NETはVB6.0とはまるで別言語に見えてしまい、ヘルプを見ずに書けて、exe形式が簡単に作れて、.NET Frameworkも要らないVB6.0を使えればなぁという思いがあるため、腰が引けています。
なんだか腰が引け過ぎているのですが、以上の思いから、できればVB6.0で、できるだけ簡単に、冒頭の機能を備えたチャットソフトを作りたいと考えています。
そこで、「その程度の機能ならば、VB6.0でも簡単に作れるよ」という情報をお持ちの方、あるいは「.NETを使えば、こんなに簡単に作れるよ」という情報をお持ちの方がいらっしゃいましたら、ヒントだけでも結構ですので、情報をいただけませんでしょうか。
できるだけこちらの情報を書いたほうが失礼がないと思い、長々と書いてしまいましたが、何卒宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
socket とは、(元々はUNIXで)TCP/IPを用いたネットワーク通信を行うために作られたライブラリです。
UNIX以外のOSでも、今ではTCP/IPを行う代表的なライブラリになっており、
Windows用のsocketが「winsock」です。
つまり、VB6でも、そのものずばり「winsockコントロール」が、「ソケットプログラミング」のためのコントロールなわけです。socketベースでプログラムを組むのなら、VB6でも.netでも難易度は変わりません。
ただし、socketは、TCP/IPでの通信が何でもできる分、HTTP専用なInetコントロールなんかと比べるとちょっと複雑ではあります。
ですが、実際には、初期化などの「おまじない」的な部分がちょっと面倒ですが、
winsockによる通信そのものは、VB6で組んでもたいして難度は高くないです。
一言でいうなら、Winsockでは、Winsock コントロール2つがペアになっていて、
あるPCのWinsockコントロールでSendData を呼び出すと、そこで引数に指定したデータが
それとペアになっている別のPCのWinsockコントロールの GetData で受け取ることが出来る、
というただそれだけの仕組みです。
おそらく、チャットソフトを作る上で、一番難しいのは、プログラミング部分ではなく、
ここでやりとりするデータに「どういう意味を持たせるか」という「プロトコルの設計」部分になるかと思います。
たとえば、3人でチャットするシステムだったら、ある一人からの書き込みは、残り二人にそれぞれ送る、といった仕組みで問題ないでしょう。
もし、300人でチャットするシステムだったら、ある一人からの書き込みを残299人にそれぞれ送る、といった仕組みだと、参加者300人がそれぞれ299人の送り先にデータを送るという「300×299=89700本のデータの流れ」ができるという非現実的なものになってしまいます。
そういう規模になってくると、中央にチャットのメッセージをとりまとめるサーバを置いて、
各書き込みは、サーバの方に送り、サーバは受け取ったメッセージを300人の全参加者に配信する、
といった仕組みにするのが普通です。その場合、全体でのデータの流れは600本で済みます。
その代わり、「サーバ」という特別な役割を持ったプログラムが必要になります。
その場合、データには、メッセージ文章と一緒に「全員に送るのかグループ内にだけ送るのか」といった情報も付けておく必要があります。
さらには、TCP/IPで通信するには、必ず通信相手のPCの「IPアドレス」が必要になります。
参加者が使用するPCは不変でPCに割り当てられたIPアドレスが変わらないのであれば、プログラム中にIPアドレスを埋め込むといったことも可能ですが、
そうでなければ、参加者のIPアドレスを決定するという、いわゆる「ロビーサーバ」といった機能設計が必要になります。
そういった「設計」の部分が、チャットソフトを作る上での最大の難点になるかと思います。
これは、プログラミング言語とは関係ない、それより上位の設計の段階の話ですので、
VB6だったら簡単とか難しいとかそういったことにはなりません。
ご回答ありがとうございました。
非常にわかりやすくご解説いただきましたので、初心者の私にも理解することができました。なるほど、ソケットとは新しい魔法の技術ではなく、winsockだったのですね。恥ずかしながら、そこから既に知りませんでした。
また、.NETでも6.0でも難度が変わらないというお言葉に、勇気が出てきました。引けていた腰が、少し前に戻ってきました。
幸いなことに、参加者のIPは固定ですから「ロビーサーバ」は要らなさそうですし、参加人数も10名以内なので、たとえ経路をすべて直に入力してもそれほど無茶ではなさそうです。
まずはWinsockについて情報を集め、自分なりに取り組んでみます。そして、もしまた解らないことが出てきましたら、どうかお力をお貸し下さい。
No.2
- 回答日時:
まずはサンプルを探してみて、
どういう仕組みで動いているか。
どういうライブラリを使っているかを調べてみるのがいいでしょう。
VB(VS2008)+WCF
http://msdn.microsoft.com/ja-jp/library/bb690929 …
VB(VS2003) + Socketクラス
http://codezine.jp/article/detail/22
ご回答ありがとうございます。
また、情報をお調べいただき、リンクまで張ってくださり、本当にありがとうございました。
今回はwinsockについて勉強したいと思いますので、まずは2番目を参照させていただきます。
一旦締め切らせていただき、ベストアンサーは他のご回答者様とさせていただきますが、どうぞお許しいただき、またお力をお貸しいただけますと幸いです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- サバイバルゲーム このタイプの差し込み口ってなんの種類か分かりますか? 3 2022/07/29 15:32
- ZOZOTOWN このタイプの差し込み口ってなんの種類か分かりますか? 2 2022/07/29 15:31
- ドライブ・ストレージ 内蔵HDD選びで 6 2023/06/01 21:52
- モニター・ディスプレイ 突っ張り棒につけれるマイクアームを探しています。下記リンクはモニターアームですがそのようにポールにつ 3 2022/09/07 01:18
- その他(パソコン・スマホ・電化製品) 古くなった超音波洗浄機における超音波トランスデューサーの交換 2 2022/11/12 11:07
- 防犯カメラ・監視カメラ・小型カメラ 屋外用のIPカメラ(ライブカメラ)の位置情報について 1 2022/06/23 18:32
- 電気・ガス・水道 ソーラーパネル初心者です 1 2023/01/01 13:46
- デスクトップパソコン 小型PCのオススメを教えてください 3 2022/09/18 19:39
- 仮想通貨(暗号通貨) 暗号資産(仮想通貨)で稼ぐには情報の鮮度 どうしたら良い情報を入手できますか 1 2022/10/11 14:26
- 船舶・クルーズ Windows10のエクスプローラにて。 1 2022/10/10 20:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vb.netで画面のコントロールId...
-
カメラスクロールするのを動画...
-
間違えて配置してしまったコン...
-
アクセスのActiveXコントロール...
-
C#で角が丸いテキストボックス
-
ビープ音鳴らし続けたい。
-
フォーム上の現在アクティブな...
-
Labelコントロールの(左右)余...
-
VB.NETで複数のTextBoxのTextプ...
-
VB .net Panelコントロールにラ...
-
EXCELでactivexコントロールを...
-
VBAのエラーについて、”実行時...
-
C# FlowLayoutPanelにて
-
C# ユーザコントロール内のボタ...
-
'ckbl' コントロールは作成され...
-
コントロールを移動できない
-
With~EndWithの省略部分と引数...
-
(VBA)スピンボタンの大量...
-
OCXって何ですか?
-
VCでのFrame(VB6)は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
EXCELでactivexコントロールを...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
chr関数の呼び出しで「プロ...
-
変数をコントロール型で使用す...
-
VBAのエラーについて、”実行時...
-
ExcelVBAでListViewが使用できない
-
VBAのフォームでTextBoxがいっ...
-
間違えて配置してしまったコン...
-
Groupboxの配下のコントロール...
-
excelのリストボックスで選択し...
-
ACCESS2010のVBAでフォーム内ク...
-
エクセルVBAでオプションボタン...
-
フォーム上の現在アクティブな...
-
ユーザーフォームで動的(Me.Con...
-
コンボボックスの文字によるif...
-
アクセス特有の書き方?
おすすめ情報