ネットワークプログラミングの知識0でこれからC/C++でwindowsで動くチャットソフトを作ることを目標に勉強しようと考えています。
一応、C/C++言語、Win32プログラミングは独学で勉強しました。
そこでいくつか質問させてください。
まず、どんなチャットソフトかというと
WEBページを使ったチャットではなく、windowsで動くソフトという形のチャットソフト。過去ログも保存されて、チャットソフト起動するとみることができる。昔、ローカルエリアに接続されたコンピュータ同士の通信をするプログラムを少しだけ作ったのですが、どこからでも通信を行うチャットを作りたいです。
ネットワークプログラムについてまったくわからないのでここからは自分の想像なので間違った知識があるかと思いますが、これを実現するにはサーバーを作らないといけないと思うのですが、自宅サーバーではなくレンタルのサーバーを借りて、実現したいと考えています。
この場合どんな知識を身に付ければ実現できるのでしょうか?C言語でサーバープログラム(レンタルサーバーで動く)は作れないですよね?
何を使えば良いのでしょう?サーバーってどういう仕組みで過去ログなどを保存できるのでしょうか?そもそも過去ログなどのデータを保存しておくことはできるのでしょうか?レンタルサーバーを使うと他にどんなプログラムを作ることができるでしょうか?
どんな知識を身に付ければ良いかアドバイスください。
何かお薦めの書籍やサイト等あったら教えてください。
特におすすめなネットワーク関係の書籍あったら教えてください。基本的なネットワークの仕組みが詳しく書かれていてサンプルプログラムなどがあればうれしいです。
No.1
- 回答日時:
共有レンタルサーバ(1台のコンピュータを多数のユーザが使う)では無理でしょう。
ウェブサイトとウェブプログラムぐらいしか許可しないと思います。専用サーバ(1台のコンピュータを一人で使う)でルート権限がもらえれば何でも出来ると思いますが費用も高いです。
参考にさくらの専用サーバで一番安いのが7800円/月です
http://server.sakura.ad.jp/dedicated/entry/index …
レンタルサーバのOSはLinuxが多いでしょうからとりあえず自宅にLinux環境を作ってローカル内でテストしてからですね。
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.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でも、レンタルサーバ側でファイルを読み書きできますので、そこに「チャットのログ」を保存しておくことが可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- インターネット広告・アフィリエイト アフェリエイトサイト 作成について 5 2022/05/13 21:31
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(プログラミング・Web制作) Windows上のプログラム。「予め決められた時刻に自分で起動して処理して自分で終了する」って可能? 3 2023/01/04 14:29
- ダイヤルアップ Raspberry Piでアナログモデム経由で音声再生 1 2022/05/20 18:01
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- サーバー Googleドライブなどを使わずにテザリングAndroidでWindowsとファイル共有 1 2023/02/19 13:14
- 会計ソフト・業務用ソフト 会計ソフトを探してます。 4 2022/08/17 08:35
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Cプログラムの解析(関数の呼び...
-
SNMPトラップ情報をC#.netで作...
-
API、OCX、DLLって何でしょう?
-
自動で施設の空きを通知するプ...
-
VBプログラムをEXCEL VBAに移植...
-
Timerイベントについて
-
大至急!!! ピクトグラミング...
-
コンソールアプリでファイル選...
-
stdio.hのバッファについて。
-
損害保険募集人 資格について
-
1年無職の彼氏 別れるべきですか?
-
P検について
-
情報処理技術者1種と2種について
-
Object Moved This object may ...
-
今職業訓練のパソコン教室行っ...
-
Excelで用語辞典を作成するには?
-
全豊田作業責任者
-
個人HPにログイン機能付けられる?
-
シグネチャはどこにいれるべき?
-
情報処理試験のうち、中小企業...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
UNIX環境でのCプログラム上でC...
-
このプログラミング誰か教えて...
-
C言語のHP-UXからLinuxへのポ...
-
Ryzen 3700(無印)はWin11に対応...
-
VB.net エラーメッセージを英文...
-
SNMPトラップ情報をC#.netで作...
-
プログラムとは理系ですか文系...
-
現在プログラミングの研修中な...
-
C言語でSMTPを使ったプログ...
-
VBS:コンピュータ名を取得し、...
-
C/C++でチャットソフトを作りた...
-
OSとCPUの関係について
-
DLLってなに?
-
自動で施設の空きを通知するプ...
-
PHP+MySQLで家計簿を作りたい
-
どんなプログラムを自作しまし...
-
コンソールアプリでファイル選...
-
If … then の中の条件式と型に...
おすすめ情報