ネットワークプログラミングの知識0でこれからC/C++でwindowsで動くチャットソフトを作ることを目標に勉強しようと考えています。
一応、C/C++言語、Win32プログラミングは独学で勉強しました。
そこでいくつか質問させてください。
まず、どんなチャットソフトかというと
WEBページを使ったチャットではなく、windowsで動くソフトという形のチャットソフト。過去ログも保存されて、チャットソフト起動するとみることができる。昔、ローカルエリアに接続されたコンピュータ同士の通信をするプログラムを少しだけ作ったのですが、どこからでも通信を行うチャットを作りたいです。
ネットワークプログラムについてまったくわからないのでここからは自分の想像なので間違った知識があるかと思いますが、これを実現するにはサーバーを作らないといけないと思うのですが、自宅サーバーではなくレンタルのサーバーを借りて、実現したいと考えています。
この場合どんな知識を身に付ければ実現できるのでしょうか?C言語でサーバープログラム(レンタルサーバーで動く)は作れないですよね?
何を使えば良いのでしょう?サーバーってどういう仕組みで過去ログなどを保存できるのでしょうか?そもそも過去ログなどのデータを保存しておくことはできるのでしょうか?レンタルサーバーを使うと他にどんなプログラムを作ることができるでしょうか?
どんな知識を身に付ければ良いかアドバイスください。
何かお薦めの書籍やサイト等あったら教えてください。
特におすすめなネットワーク関係の書籍あったら教えてください。基本的なネットワークの仕組みが詳しく書かれていてサンプルプログラムなどがあればうれしいです。
No.3ベストアンサー
- 回答日時:
> クライアント側を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でも、レンタルサーバ側でファイルを読み書きできますので、そこに「チャットのログ」を保存しておくことが可能です。
No.2
- 回答日時:
> C言語でサーバープログラム(レンタルサーバーで動く)は作れないですよね?
質問者さんは、ブラウザ経由ではなく独自プログラムでの通信をしたいようですから、
サーバ側も、Webサーバでない独自のプログラムを動かす必要があります。
となると、問題は
・Webブラウザ経由でないサーバプログラムを動かせるかどうか
・C言語で書いたプログラムを動かせるかどうか
の二つあります。
無料だったり安いレンタルサーバでは、「CGI」「PHP]など、WebブラウザからWebサーバ経由で起動するプログラムしか動かすことができません。
いわゆる「デーモン」(daemon)と呼ばれる「常駐プログラム」を動かせるようなホスティングサービスを選ぶ必要があります。
後者については、そういうデーモンを動かせるような所なら、まず大丈夫です。普通のデーモンソフトの場合、C言語で書かれてる場合の方が多いですし。
> サーバーってどういう仕組みで過去ログなどを保存できるのでしょうか?
> そもそも過去ログなどのデータを保存しておくことはできるのでしょうか?
デーモン(サーバープログラム)も、単に起動しっぱなしで、クライアントからのネットワーク通信をいつでも受信できるようになってるだけ。
過去ログを保存したかったら、単にファイルに書き出しておくだけです。そのあたりは普通のプログラムと同じです。
> レンタルサーバーを使うと他にどんなプログラムを作ることができるでしょうか?
> ネットワークプログラミングの知識0
> この場合どんな知識を身に付ければ実現できるのでしょうか?
そんなレベルからだと、いきなりそういうチャットプログラムを作るのは非常に難易度が高いです。「設計」でつまづく可能性が高いと思います。
まずは、Webベースのチャットソフトを作るところから始めた方が良いかと思います。
それが出来たら、クライアント部分を「Webブラウザ」ではなく「windowsで動くソフトという形のチャットソフト」に作り替える、という流れで。
そうすれば、サーバ側はWebサーバベースになりますので、
上述の様に、独自のデーモンを動かせるような高機能ホスティングでなくても、
単に「CGIが使えるだけ」レベルのレンタルサーバでも動かせるようになります。
レンタルサーバ側についても、探せば「C言語によるCGI」をサポートしている所は結構あります。
そういう所を使えば、比較的安価にサーバ側を実現できます。
CGIの場合、サーバ側では「ネットワークプログラミング」に関する知識は基本的に不要です。
そのあたりはWebサーバ側が全部やってくれますので、CGIは主に文字列処理(クライアントからテキストを受け取って、クライアントにテキストを返す)をするだけです。
この回答への補足
回答ありがとうございます。
クライアント側をwindowsで動くソフトという形でサーバー側をCGIなどを利用したWebサーバベースで作ることは可能なのでしょうか?
Webサーバベースとそうでないサーバの違いってなんでしょうか?
過去ログを吐き出すプログラムはサーバー側で、レンタルサーバーの領域に保存しておくことができるということでしょうか?
No.1
- 回答日時:
共有レンタルサーバ(1台のコンピュータを多数のユーザが使う)では無理でしょう。
ウェブサイトとウェブプログラムぐらいしか許可しないと思います。専用サーバ(1台のコンピュータを一人で使う)でルート権限がもらえれば何でも出来ると思いますが費用も高いです。
参考にさくらの専用サーバで一番安いのが7800円/月です
http://server.sakura.ad.jp/dedicated/entry/index …
レンタルサーバのOSはLinuxが多いでしょうからとりあえず自宅にLinux環境を作ってローカル内でテストしてからですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Cのプログラムからアクセスでき...
-
Windows Formアプリからコンソ...
-
プログラム言語について c言語...
-
大量のデータを読み込んで表示...
-
C言語って古いですか?
-
CPUが16bitでも32bitOSでコンパ...
-
プログラマーです。このDB設計...
-
0 == False はいいけど
-
swift言語の最適化 swift最適化...
-
Python、プログラミングについ...
-
C#でログファイルにファイルパ...
-
プログラミングでArduinoのc++...
-
gccを行ってもexeファイルが生...
-
c言語
-
ホワイトハッカーを目指そうか...
-
ディスプレイの解像度とマウス...
-
プログラミング言語でアプリや...
-
c++の勉強方法を教えてくださ...
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
Ryzen 3700(無印)はWin11に対応...
-
VBプログラムをEXCEL VBAに移植...
-
C言語のHP-UXからLinuxへのポ...
-
サイクロイドの軌跡
-
SNMPトラップ情報をC#.netで作...
-
バージョンのつけ方
-
コンソールアプリでファイル選...
-
VB.net エラーメッセージを英文...
-
UNIX環境でのCプログラム上でC...
-
VBS:コンピュータ名を取得し、...
-
MS-DOSで作ったBASICプログラム...
-
ニンテンドーDS用、自作プロ...
-
ランチャーの作り方について教...
-
Perl5とActivePerl
-
SEってなに?
-
stdio.hのバッファについて。
-
AIなんて所詮人間のプログラ...
-
プログラムの作り方
-
VB2005の自作ブログラムをWin10...
おすすめ情報