サーバとの通信に適したプログラム

このQ&Aのポイント
  • VisualStudio2008のMFCプロジェクトにて、クライアントPCとサーバ間での通信を行うプログラムを作成しようとしています。
  • クライアントPCとサーバでの通信プログラムは初めてで、通信自体も詳しくないため、ネットで色々調べている段階なのですが、どういった通信プログラミングが適しているのかが解りません。
  • CAsyncSocket、CInternetsession等、色々あるようですが、上記のような環境/仕様の場合、何が適しているのでしょうか?
回答を見る
  • ベストアンサー

サーバとの通信に適したプログラム

VisualStudio2008のMFCプロジェクトにて、 クライアントPCとサーバ間での通信を行うプログラムを作成しようとしています。 クライアントPC側で、特定の命令を送り、 それを受け取ったサーバ側で、命令に沿って、 DBのデータを送ったり、単に文字列を送ったり、 サーバ内ファイルを送り、 クライアントPCがそれを受け取るという プログラムの仕様となります。 PCとサーバでの通信プログラムは初めてで、 通信自体も詳しくないため、ネットで色々調べている 段階なのですが、どういった通信プログラミングが 適しているのかが解りません。 CAsyncSocket、CInternetsession等、 色々あるようですが、上記のような環境/仕様の場合、 何が適しているのでしょうか? 通信については勉強中につき、 漠然としすぎているのかもしれませんが、 よろしくお願いします。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8524/19375)
回答No.1

http://www.golgo.jp/winsock.html http://ja.wikipedia.org/wiki/Winsock 辺りを参考に。 サーバがUNIX(BSD系)、クライアントがWindowsなら、双方に同等の関数があるので、楽に組める筈です。 関数ライブラリが「サーバ側にしかない」「クライアント側にしかない」と言う場合、ライブラリがない方のマシンでは、低水準のシステムコールを組み合わせて「同等のライブラリを自作」する必要があります。 しかも、自作する場合、片方にしかない既存ライブラリの「仕様書に載っていない細かな仕様」まで完璧に同じに作らないと、双方で正しく送受信する事は出来ません。 なので、必須条件として「サーバとクライアントの双方の開発環境で、同等のライブラリ関数が存在する事」というのが出て来ます。 WinSockであれば、サーバとクライアントのエディアンの違いも、htonl、htons、ntohl、ntohsなどの関数で解決出来るので、WinSockをお勧めします。

lhouse
質問者

お礼

ありがとうございます。WinSockで試してみます。

関連するQ&A

  • windows7で通信プログラムがうまくいきません。

    windows7で通信プログラムがうまくいきません。 XPの時にCで作った単純なHTTP通信プログラムが7だと動作不慮を起こしてしまいます。 サーバー側(centOS)では送ったデータはしっかりと受信できているのですが、そのデータをクライアント(Win7)に送り返すと、データの前半はしっかり受け取っているのですが、後半が壊れて・・・みたいなのがずっと無限に続いて、通信プログラムがとまらなくなるのです。 これって、Win7のせいですか? それとも、やっぱり僕のプログラムがおかしいのでしょうか?

  • ソケット通信におけるコントローラの作成

    こんにちは.いつもお世話になっています. 質問なのですが,現在ソケット通信でサーバプログラム,クライアントプログラムで通信し,文字列をやり取りするプログラムを作成しました. このクライアントプログラムは3つあり,3つのプログラムすべてがサーバに接続されるとサーバが文字列を返す仕組みになっています. そこで,この三つのプログラムが別々のPC上に乗っている場合に三つのプログラムを一つのコントローラプログラム(一台のPC)上から起動あるいは通信させられるようにプログラムを作りたいと思っています. 例えばコントローラプログラムを起動すると,1:プログラムAを起動,2:プログラムBを起動,3:プログラムCを起動,という選択肢が表示され,1を選択すると別PC上のプログラムAが起動する,という方式です.実際にはプログラムAの起動は手作業で行って,通信の開始だけをコントロールできる方式でも構いません. 考えとしてはクライアントプログラムが定期的にサーバプログラムと通信を行っていて,サーバプログラムがコントローラプログラムから命令を受け取ったらフラグを立て,そのフラグをみてクライアントプログラムが通信を開始する,というものなのですがどうもうまくいきません.(定期通信が実現できません) どうすればこのような構成を実現できるでしょうか? ご教授お願いします.

  • チャットのプログラムについて

    チャットのプログラムを作ってみようという本を読んだら チャットする2人が、サーバー側とクライアント側に分かれて チャットするプログラムが載っていました。 でも実際にはサーバー側とかクライアント側に分かれていたら 使い勝手が悪いですよね。実際に有名どころのぺたろうや IP Messengerなどはそういうことを気にせずに使えます。 これらのソフトはサーバー側やクライアント側という関係なくして どうやって通信しているのですか? 簡単な説明で良いので教えてください。

  • 別サーバーのデータの取得

    ●仕様環境:PHP5 常時起動しているサーバAからサーバBのHTML部分をHTTP リクエストで一定時間毎に取得したいのですが下記の事がわかりません。 ●質問 サーバA側のプログラミングはループなりで待たせて置き、 データ取得のタイミングがきたらBサーバにリクエストを 出すと言った処理を考えましたが、 サーバA側のプログラミングで、 (常時実行)無限ループで待たせて置く命令を書いたとしても、 そのサーバA側プログラミングへ、クライアント側からアク セスしないと最初の実行開始が出来ないと思うのですが、 PHPではこの様な処理をする事は不可能でしょうか? もし、不可能ならば、サーバ上で実現するにはどのような実 装のさせ方がありますでしょうか? ●補足 ※クライアントサイドでは無い前提で、教えていただけません でしょうか? リクエストを出す時点でクライアントプログラミングになるかも 知れませんがデスクトップアプリケーションの様な形では無く実 現させたいのです、表現が間違ってましたら申し訳ありません。

    • ベストアンサー
    • PHP
  • レンタルサーバーであるプログラムを常に走らせておく

    PHPやperlなどが使えるレンタルサーバーで以下のような処理をさせたいのですができますか 1 指定のTwitterアカウントに新しいツィートが投稿されるのを察知 2 そのツィートに含まれる文字列を処理して結果を別のTwitterアカウントでツィートする 1を実現するにはツィートをモニターするプログラムをサーバー側で常に走らせている必要があると思います。htdocフォルダに1を実行するPHPファイルを入れてもクライエントがサーバーにアクセスして処理を頼まない限りサーバー側では何もしてくれませんよね? クライエントの要求なしで常にサーバー側であるプログラムを実行させておくにはどうしたらいいのでしょうか?

  • 複数ファイルから同じ関数の呼び出しできますか?

    今、クライアント・サーバーのプログラムを作っているのですが、クライアントとサーバの間の通信を暗号化しようとしています。 開発環境はVisualStudio2010のMFCを使っています。 サーバとクライアントのプログラムとを同一のプロジェクトにして、サーバとクライアントの起動をオプションで切り分けています。 しかし暗号モジュールは一つのファイルなので、これをp1.cppとしましょう。 サーバのファイルをmain.cpp クライアントをsub.cpp として、main.cppの方で#include "p1.cpp"とやっても、クライアントのソースからは関数が参照できません。 例えば g++ main.cpp sub.cpp として、両方に同じ関数を書くと2重定義になります。 クライアントのsub.cpp にも同じようにインクルードしてやると、再定義されてるとリンクエラーが出ます。どうすれば同じ関数を同一プロジェクト内で共有(他のファイルから参照)させることができますでしょうか? 解決法をよろしくお願いします。

  • サーバプロセスとクライアントプロセスの通信

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (1)TCPコネクション  サーバ側ポート番号【23】と、それぞれのクライアント側ポート番号【****】との間に確立する。   (2)通信処理  クライアント側のプロセスAは、サーバ側のプロセスA(子)  クライアント側のプロセスBは、サーバ側のプロセスB(子)  クライアント側のプロセスCは、サーバ側のプロセスC(子)  との間で通信を行う。 ※添付の図も参照ください。 認識に相違ないでしょうか。 サーバプロセスとクライアントプロセスの通信を行う際、プロセス間(ポート間?)の通信には、IPアドレスとポート番号を組み合わせたソケットを用いるため、サーバ側ではソケット【192.168.0.1:23】を1個作成し、クライアント側ではソケット【192.168.0.2:****】をプロセス分作成すると考えています。 このとき、クライアントプロセスAはサーバプロセスA(子)と通信を行いますが、サーバ側で作成されているソケットは1つであるため、どの子プロセスに対してデータをせばいいのか判別できないのではないかと考えています。 ※クライアントプロセス(A、B、C)はソケット(サーバ側)【192.168.0.1:23】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • クライアント端末にも情報保持できるのか?

    はじめまして。ご存知の方がいましたら教えてください。postgresにてサーバと通信しない出来ない場合に備えてクライアント側にもDBを持たせる事って出来るのですか?当然、容量等も影響してくるかと思うのですが。 それとプログラミング等でクライアント側に自動でDB設定とかが出来るのでしょうか?数が多いので自動化したいのです。 お手数かけますがよろしくお願いします。

  • ソケット通信について

    VC++6.0MFCでソケット通信のプログラムを作成しようとしています。勉強始めたばかりなので、やっと普通に通信するプログラムは理解できたところです。 そこで応用していろいろ考えているのですが、方法がわからないところがありますので教えていただければと思ってます。 サーバ側の接続待ちはいつでも受けれるようにして、接続してきたクライアントに対して送信したいと考えております。ソケットの接続情報を保持しておいて、別プロセスの送信プログラムが接続クライアントに対して送信したいと考えてます。その送信プログラムが複数ある場合も同じ接続情報を利用したいと考えてるのですが、可能でしょうか。 説明が下手で申し訳ありません。補足はいたしますので、アドバイスお願いいたします。

  • アプレットからサーバ側のプログラムを起動したいのですが…

    仕事でJavaを使うことになったのですが、プロジェクト員一同Java初心者で、必死にJavaを勉強していますが、以下のことで困っています。申し訳ありません。助けてください。 UNIXサーバ側の設定とかをいじるプログラムがあるのですが、それをアプレットにして、SEさんがリモートからでも操作出来るようにしろ、と言われました。 とりあえず、Javaアプレットからサーバ側(アプレットのクラスが置いてあるのと同じマシン)のCプログラムを起動し、その結果を受け取るようにしたいのですが、Java経験者に相談したら「アプレットにはセキュリティ上の問題があるのでCGIかServletを使わないと出来ない」と言われました。 では…とServletの勉強を初め、サーバー側にServletEngineをいれてみたのですが、 ServletはHTTPポートと違うポート(8000番とか)を開けてそこにアクセスしなくてはいけないようにみえます。それならクライアント側プログラムをアプレットにし、サーバ側プログラムとSocket通信で結び、サーバ側プログラムがCプログラムを起動、としたほうが楽そうですが、ひとつしかポートを開きたくないと言われたのです。 もしかして「アプレット+Servlet が アプレット+CGI相当」じゃなく「Servlet が アプレット+CGI相当」なのでServlet用のポートだけ開けとけばいいとかいうことでしょうか?  とか思っていたら、JNIでC言語のメソッドをJavaメソッド扱いするとかいう話も小耳に挟みました。それでできるのかしら? ・webポートだけを開いて ・サーバ側のCプログラムを起動してその結果を受け取る ・クライアントのマシンにあらかじめインストールしなくても、ブラウザからアクセスすると操作が対話的に出来るような ものを簡単に作ろうとしたら、一体何を勉強するべきなのでしょうか…。 Applet+CGI? Applet+Servlet? RMI? JNI…? 助けてください…(TT)

    • ベストアンサー
    • Java