例えば「冷蔵庫のドアが開いた」とか「雨が降ってきた」とか「お
風呂の水が満水になった」とか「その風呂の温度は今何度。」とか
「部屋の温度が今何度。」などという家の中の情報をそのプログラ
ムで収集しているとします。
その情報を元にPCからサーバーに自働でHTTPコマンドを送りたい
のですが、どうしたら良いか具体的な方法がわかりません。
ことが起こってから、長くて1秒以内の対処を考えてます。
(↑理想的にはHTTPコマンドを送るのはことが起きてから、数ms
オーダにしたい。)
HTTPコマンドを送るにはCGIを使えば良いと聞きました。
(↑私はこの程度のレベルです。)
こういった案件にPerlは使えますか?
(↑ファイル管理や大量のテキストデータをPerlで扱ったことがあ
るので、Perlは初心者レベルでは使えます。)
C言語とのデータのやり取りは一般的にはどうすれば良いですか?
参考図書なども示して頂けると助かります。
よろしくお願い致します。
CコンパイラはVC6です。
このC言語のプログラムも前任者が作ったものを改造しているので、根本は良くわかってませんが。
PCのOSはWinXPです。
C言語でもsocket間通信と言うのができるのですね。
ありがとうございます。
二つのことをやらなくちゃいけません。
HTTPコマンドを送るにはCGIを使えば良いと聞きました。
...
こういった案件にPerlは使えますか?
これは、後者の方だけですね。
perl だけじゃなく、ruby や、C言語でも書くことができます。
前者の方については、テキストを socket で通信するだけなので、やったことがあれば、たいして難しくありません。
↓とか見て理解できますか?
http://x68000.q-e-d.net/~68user/net/c-http-1.html
このページだと、データを取得する方に傾いて書いてありますが、送るデータがちょっと多くて、
受け取るデータがちょっと少ない、という違いだけです。
ありがとうございます。
「テキストをsocketで通信するだけ」が現時点ですでに理解できておりません。
でも1の方のご回答でもCでsocketの話が出ているので、そちらが一般的なのでしょうね。
元々の仕事が機械屋でものの設計するのは得意なのですが...。
リストラ先の部署がソフト屋で、教育も無しにこんな仕事が降ってきて...。
という状況です。
愚痴ってもしょうがないので、とりあえずCの教科書を読んでみます。
ご回答ありがとうございました。
大変助かります。
【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通信は避けて通れそうにないですね。
助かります。
詳しい解説ありがとうございます。
httpコマンドの詳細が分かりかねますので別の角度から簡単にアプローチしてみましょうか。
要はローカル端末上のデータをwww(file)サーバ上へ転送したい、という仮定でお話ししますね。
FFFTPに代表されるFTPツールはご存知でしょうか。
http://www2.biglobe.ne.jp/~sota/ffftp.html
通常はこう言ったツールでwwwサーバへファイルを転送しますが
これを自動で転送出来れば良いという事ですよね。
これにはWindows記録ツールを使います。
代表的な物にUWSCが御座います。
UWSC
このツールはマウス操作を記録して反復動作が可能です。
簡単に言うと、マウス(ビデオ)の録画・再生の感じです。
画面上にFFFTPを立ち上げておいてUWSCで収集されたcsvファイル等をサーバ側へドロップしてやれば
半永久的にファイルをwww側へ投げてくれます。
サーバ側で別の担当者さんがデータが変わっていればその後の処理をされれば良いかと思います。
まずはご回答ありがとうございました。
でも求めている内容と少し結果が違います。
一応ご教示頂いたFFFTPもマウスやキーボードマクロも存じ上げております。
そうではなくてC言語で収集した結果をhttpコマンドで自働でサーバに投げる(GET/POST?)方法が知りたかったのです。
こちらが決まったコマンドを投げると、サーバ側の反応はそれに応じて自働で応答があるという感じです。
CコンパイラはVC6です。
このC言語のプログラムも前任者が作ったものを改造しているので、根本は良くわかってませんが。
PCのOSはWinXPです。
C言語でもsocket間通信と言うのができるのですね。
ありがとうございます。