みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C/C++でチャットソフトを作りたい!

ネットワークプログラミングの知識0でこれからC/C++でwindowsで動くチャットソフトを作ることを目標に勉強しようと考えています。
一応、C/C++言語、Win32プログラミングは独学で勉強しました。
そこでいくつか質問させてください。
まず、どんなチャットソフトかというと
WEBページを使ったチャットではなく、windowsで動くソフトという形のチャットソフト。過去ログも保存されて、チャットソフト起動するとみることができる。昔、ローカルエリアに接続されたコンピュータ同士の通信をするプログラムを少しだけ作ったのですが、どこからでも通信を行うチャットを作りたいです。
ネットワークプログラムについてまったくわからないのでここからは自分の想像なので間違った知識があるかと思いますが、これを実現するにはサーバーを作らないといけないと思うのですが、自宅サーバーではなくレンタルのサーバーを借りて、実現したいと考えています。
この場合どんな知識を身に付ければ実現できるのでしょうか?C言語でサーバープログラム(レンタルサーバーで動く)は作れないですよね?
何を使えば良いのでしょう?サーバーってどういう仕組みで過去ログなどを保存できるのでしょうか?そもそも過去ログなどのデータを保存しておくことはできるのでしょうか?レンタルサーバーを使うと他にどんなプログラムを作ることができるでしょうか?
どんな知識を身に付ければ良いかアドバイスください。
何かお薦めの書籍やサイト等あったら教えてください。
特におすすめなネットワーク関係の書籍あったら教えてください。基本的なネットワークの仕組みが詳しく書かれていてサンプルプログラムなどがあればうれしいです。

投稿日時 - 2009-09-19 05:21:38

QNo.5301788

すぐに回答ほしいです

質問者が選んだベストアンサー

> クライアント側をwindowsで動くソフトという形でサーバー側をCGIなどを利用したWebサーバベースで作ることは可能なのでしょうか?

可能です。Webのブラウザとサーバの間は、「ポート80番」を使って「HTTPプロトコル」で通信しており、WebサーバがCGIやPHPなどのプログラムを動かします(ですから、CGIやPHPでは、直接ネットワーク通信に関するコードを書く必要はありませんし、かけません。Webサーバ経由でクライアントとの情報の受け渡しを行います。)
自作Windows用ソフトでも、「HTTPプロトコル」を使えば、Webサーバ経由でCGIと通信することは可能です。

> Webサーバベースとそうでないサーバの違いってなんでしょうか?

通常の安価なレンタルサーバでは、上述の「Webサーバ」はプロバイダ側が用意していて、ユーザー自身が作れるのは「CGIやPHPのプログラム」までです。それ以外のプログラムをサーバ側で動かすことは出来ません。
一方、ちょっと高めのホスティングサービスだと、Webサーバ以外のプログラムを動かすことができます。その場合、ポート80番のHTTPプロトコル以外で通信する「自作のサーバプログラム」も動かすことが可能です。

それと、Webサーバベースのデメリットですが、HTTPプロトコルは基本的に「最初にクライアントからサーバへリクエストを送り」「サーバからの返答がクライアントに返される」という流れになりますので、「データの流れがそれぞれ1回かぎり」であるという問題があります。
「チャット」では、クライアント→サーバ、サーバ→クライアント、どちらのデータの流れも順不同に発生しますので、普通はプロトコルの設計としては「コネクションを張りっぱなしで互いにデータを送りあう」ようにします。ですが、HTTPベースではそれができませんので、送るべきデータが発生するたびに、一々コネクションを張り直す必要があります。

> 過去ログを吐き出すプログラムはサーバー側で、レンタルサーバーの領域に保存しておくことができるということでしょうか?

そうです。通常はCGIでもPHPでも、レンタルサーバ側でファイルを読み書きできますので、そこに「チャットのログ」を保存しておくことが可能です。

投稿日時 - 2009-09-22 11:23:57

お礼

回答ありがとうございます。
やる気が湧き上がってきました。がんばってやってみようと思います。

投稿日時 - 2009-09-26 14:34:36

ANo.3

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

> C言語でサーバープログラム(レンタルサーバーで動く)は作れないですよね?

質問者さんは、ブラウザ経由ではなく独自プログラムでの通信をしたいようですから、
サーバ側も、Webサーバでない独自のプログラムを動かす必要があります。
となると、問題は
・Webブラウザ経由でないサーバプログラムを動かせるかどうか
・C言語で書いたプログラムを動かせるかどうか
の二つあります。
無料だったり安いレンタルサーバでは、「CGI」「PHP]など、WebブラウザからWebサーバ経由で起動するプログラムしか動かすことができません。
いわゆる「デーモン」(daemon)と呼ばれる「常駐プログラム」を動かせるようなホスティングサービスを選ぶ必要があります。
後者については、そういうデーモンを動かせるような所なら、まず大丈夫です。普通のデーモンソフトの場合、C言語で書かれてる場合の方が多いですし。


> サーバーってどういう仕組みで過去ログなどを保存できるのでしょうか?
> そもそも過去ログなどのデータを保存しておくことはできるのでしょうか?

デーモン(サーバープログラム)も、単に起動しっぱなしで、クライアントからのネットワーク通信をいつでも受信できるようになってるだけ。
過去ログを保存したかったら、単にファイルに書き出しておくだけです。そのあたりは普通のプログラムと同じです。




> レンタルサーバーを使うと他にどんなプログラムを作ることができるでしょうか?


> ネットワークプログラミングの知識0
> この場合どんな知識を身に付ければ実現できるのでしょうか?

そんなレベルからだと、いきなりそういうチャットプログラムを作るのは非常に難易度が高いです。「設計」でつまづく可能性が高いと思います。
まずは、Webベースのチャットソフトを作るところから始めた方が良いかと思います。
それが出来たら、クライアント部分を「Webブラウザ」ではなく「windowsで動くソフトという形のチャットソフト」に作り替える、という流れで。

そうすれば、サーバ側はWebサーバベースになりますので、
上述の様に、独自のデーモンを動かせるような高機能ホスティングでなくても、
単に「CGIが使えるだけ」レベルのレンタルサーバでも動かせるようになります。

レンタルサーバ側についても、探せば「C言語によるCGI」をサポートしている所は結構あります。
そういう所を使えば、比較的安価にサーバ側を実現できます。

CGIの場合、サーバ側では「ネットワークプログラミング」に関する知識は基本的に不要です。
そのあたりはWebサーバ側が全部やってくれますので、CGIは主に文字列処理(クライアントからテキストを受け取って、クライアントにテキストを返す)をするだけです。

投稿日時 - 2009-09-19 18:02:39

補足

回答ありがとうございます。
クライアント側をwindowsで動くソフトという形でサーバー側をCGIなどを利用したWebサーバベースで作ることは可能なのでしょうか?
Webサーバベースとそうでないサーバの違いってなんでしょうか?
過去ログを吐き出すプログラムはサーバー側で、レンタルサーバーの領域に保存しておくことができるということでしょうか?

投稿日時 - 2009-09-20 08:21:31

ANo.1

共有レンタルサーバ(1台のコンピュータを多数のユーザが使う)では無理でしょう。ウェブサイトとウェブプログラムぐらいしか許可しないと思います。
専用サーバ(1台のコンピュータを一人で使う)でルート権限がもらえれば何でも出来ると思いますが費用も高いです。
参考にさくらの専用サーバで一番安いのが7800円/月です
http://server.sakura.ad.jp/dedicated/entry/index.html
レンタルサーバのOSはLinuxが多いでしょうからとりあえず自宅にLinux環境を作ってローカル内でテストしてからですね。

投稿日時 - 2009-09-19 09:20:35

補足

ウェブサイト用のサーバーをソフトウェアから使うことはできないのでしょうか?

投稿日時 - 2009-09-19 14:18:40

あなたにオススメの質問