人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PCで常時動かしているC言語のプログラムがあります。
例えば「冷蔵庫のドアが開いた」とか「雨が降ってきた」とか「お
風呂の水が満水になった」とか「その風呂の温度は今何度。」とか
「部屋の温度が今何度。」などという家の中の情報をそのプログラ
ムで収集しているとします。

その情報を元にPCからサーバーに自働でHTTPコマンドを送りたい
のですが、どうしたら良いか具体的な方法がわかりません。
ことが起こってから、長くて1秒以内の対処を考えてます。
(↑理想的にはHTTPコマンドを送るのはことが起きてから、数ms
オーダにしたい。)

HTTPコマンドを送るにはCGIを使えば良いと聞きました。
(↑私はこの程度のレベルです。)
こういった案件にPerlは使えますか?
(↑ファイル管理や大量のテキストデータをPerlで扱ったことがあ
るので、Perlは初心者レベルでは使えます。)

C言語とのデータのやり取りは一般的にはどうすれば良いですか?
参考図書なども示して頂けると助かります。
よろしくお願い致します。

●質問者: gorok1
●カテゴリ:コンピュータ インターネット
✍キーワード:CGI HTTP Perl コマンド サーバー
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Banias
●90ポイント ベストアンサー

OSやCコンパイラの種類がわからないのですが、たとえばgccであればSocket間通信によってhttpパケットを送信することができます。

◎質問者からの返答

CコンパイラはVC6です。

このC言語のプログラムも前任者が作ったものを改造しているので、根本は良くわかってませんが。

PCのOSはWinXPです。

C言語でもsocket間通信と言うのができるのですね。

ありがとうございます。


2 ● a-kuma3
●70ポイント

二つのことをやらなくちゃいけません。

  1. C言語のプログラムから、socket を使って HTTP なリクエストを投げる

  2. あるリクエストを受け取って、期待の処理をする Webサーバ側のプログラムを作る


HTTPコマンドを送るにはCGIを使えば良いと聞きました。

...

こういった案件にPerlは使えますか?

これは、後者の方だけですね。

perl だけじゃなく、ruby や、C言語でも書くことができます。


前者の方については、テキストを socket で通信するだけなので、やったことがあれば、たいして難しくありません。

↓とか見て理解できますか?

http://x68000.q-e-d.net/~68user/net/c-http-1.html


このページだと、データを取得する方に傾いて書いてありますが、送るデータがちょっと多くて、

受け取るデータがちょっと少ない、という違いだけです。

◎質問者からの返答

ありがとうございます。

「テキストをsocketで通信するだけ」が現時点ですでに理解できておりません。

でも1の方のご回答でもCでsocketの話が出ているので、そちらが一般的なのでしょうね。

元々の仕事が機械屋でものの設計するのは得意なのですが...。

リストラ先の部署がソフト屋で、教育も無しにこんな仕事が降ってきて...。

という状況です。

愚痴ってもしょうがないので、とりあえずCの教科書を読んでみます。

ご回答ありがとうございました。

大変助かります。


3 ● うぃんど
●90ポイント

【1】HTTPコマンドを送るにはCGIを使えば良いと聞きました

インターネット経由でサーバープログラムを起動する方法はいろいろあります(下記一例)

(1)httpプロトコルを利用する方法

クライアント→インターネット回線→[WEBサーバ→perlなどのプログラム]

[ ]内がサーバー側での処理

主に一方通行的な使い方に適します(双方向も可能ですが応答性は必ずしも高くない)

CGIを使う方法は一番簡単で、多くのサーバで利用可能でもあるのですが

httpプロトコルは即応性に乏しく、数msどころか1秒以内の対処でも無理な場合もありけりです

(2)telnetプロトコルを利用する方法

クライアント→インターネット回線→[perlなどのプログラム]

双方向通信に適しますが直接プログラム起動などのシェルレベルでの操作が出来てしまうため

共有タイプのレンタルサーバーではtelnetでの接続を許可していない場合がほとんどです

しかしながら、即応性を求めるのであれば、これが第一の選択肢となるでしょう

(3)メールを利用する方法

クライアント→インターネット回線→メールサーバ→perlなどのプログラム

メールサーバの転送機能を利用してプログラムを起動する方法

メール転送は即応性を保証しないため、今回の要求にはまったく使えないですが、知識として…

【2】

セキュリティと安定性

(1)安定性

ベストエフォートタイプの回線は継続的な接続保証はありませんので

目的を達成するためには帯域保証のあるクライアント側回線を用意して

サーバ側でも帯域保証のあるタイプを契約しておく必要性があるでしょう

(2)セキュリティ

VPNや専用線でクライアントとサーバを繋ぐのが理想ですが

通常回線であってもSSH+TELNETなどにしておけば必要十分でしょう

【3】Perlは使えますか?

贅沢を言えばJAVAやCで作りたいところですが

サーバ側での高速処理を求めないのであればPerlでも良いでしょう

【4】C言語とのデータのやり取り

socket通信用のクラスを使うだけですが

開発環境に関する記述がないので、以下とりあえず判りやすそうなサイトを…

http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code...

http://msdn.microsoft.com/ja-jp/library/system.net.sockets.socke...

◎質問者からの返答

これも良くわかっていないのですが、とりあえずのテストなので直接サーバに繋いじゃえとリバースと書かれた短いLANケーブルを渡されました。

(↑将来的にはルータを介して、ちゃんとイントラネット上で運営するようです。)

クローズで使っているので、セキュリティとか何とかは考えず、ただひたすら早い動作を目指さねばならないようです。(↑限界がどんな感じか。)

では、Perlではどうやら駄目そうで、Cに組み付けてしまうしかなさそうですね。

最初の動作確認程度はPerlでもできるかなぁ。

C言語のsocket通信は避けて通れそうにないですね。

助かります。

詳しい解説ありがとうございます。


4 ● spyglass
●15ポイント

httpコマンドの詳細が分かりかねますので別の角度から簡単にアプローチしてみましょうか。

要はローカル端末上のデータをwww(file)サーバ上へ転送したい、という仮定でお話ししますね。

FFFTPに代表されるFTPツールはご存知でしょうか。

http://www2.biglobe.ne.jp/~sota/ffftp.html

通常はこう言ったツールでwwwサーバへファイルを転送しますが

これを自動で転送出来れば良いという事ですよね。


これにはWindows記録ツールを使います。

代表的な物にUWSCが御座います。

UWSC

http://www.uwsc.info/


このツールはマウス操作を記録して反復動作が可能です。

簡単に言うと、マウス(ビデオ)の録画・再生の感じです。

画面上にFFFTPを立ち上げておいてUWSCで収集されたcsvファイル等をサーバ側へドロップしてやれば

半永久的にファイルをwww側へ投げてくれます。


サーバ側で別の担当者さんがデータが変わっていればその後の処理をされれば良いかと思います。

◎質問者からの返答

まずはご回答ありがとうございました。

でも求めている内容と少し結果が違います。

一応ご教示頂いたFFFTPもマウスやキーボードマクロも存じ上げております。

そうではなくてC言語で収集した結果をhttpコマンドで自働でサーバに投げる(GET/POST?)方法が知りたかったのです。

こちらが決まったコマンドを投げると、サーバ側の反応はそれに応じて自働で応答があるという感じです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ