- ベストアンサー
tcpを使った カウンタプログラム
サーバーをデーモンで常駐させてクライアントからの接続要求を確立した段階で、data.txt のデータベース(もどき)へ直アクセスしそこに書かれている数値をインクリメントするプログラムを作成しました。 どうか、以下のプログラムを参照してください。 http://userlocalhost.web.fc2.com/ 使用している端末の環境は 2.6.11-1.1369_FC4 です。 xinetd で監視させないで、スタンドアローンでサーバープログラムを動作させ、クライアントから接続要求を送ると、サーバープログラムのrecord() 関数に入って、 データの読み込み ↓ データをインクリメント ↓ データを更新 という流れで期待どおりの動作をしてくれるのですが、デーモンで常駐させると、record()関数に入らないのか、データがインクリメントされて更新されません。 もう一つ問題点として、サーバープログラム又はクライアントプログラムのいずれかをプログラムが置いてあるディレクトリよりも上の階層で実行した場合、プログラムが置いてあるディレクトリよりも遠い場所から実行したばあい、そのプログラムはセグメンテーションエラーになってしまいます。 推論として。これと最初の問題点の相関が強く、別々のファイルから同時に同じファイルへアクセスしているのがマズイ(原因)のかもしれないと思い、クライアントプログラムのmain() 内のcheck() をコメントアウトしたのですが、同様にセグメンテーションエラーが出てしまい、問題点と解決策がわからず、困っております。 どうか、問題解決の答えないしヒントを教えてください。
- みんなの回答 (7)
- 専門家の回答
関連するQ&A
- TCPによるファイル転送
質問です。よろしくお願いします。 いま、winsockでクライアントからサーバにバイナリファイルを転送するプログラムを組んでいます。内容は、サーバ側を待機の状態にし、クライアントからの要求があった時点で新たにソケットを作ってそこからデータのやり取りをするというものです。 しかし、ソケットを使った通信がサーバからクライアントの一方通行になってしまっていて、データを送ることが出来ません。(クライアントから送ったデータは0になっているようにも思われます) ソケットは一方通行なのでしょうか?参考にしている本のサンプルではお互いにやり取りをしていたと思うので、そのようなことはないと思うのですが・・・。 内容分かりにくければご質問ください。 回答お待ちしています。
- 締切済み
- C・C++・C#
- [UNIX]NFSクライアントでのrpcbind起動の意味
いつも勉強させてもらっております。 HP-UX(UNIX)について質問させてください。 NFS(Network File System)についてになります。 NFSにはサーバとクライアントという役割が二つ存在しますが、 サーバ側には、NFSサーバデーモンを起動させると、「rpcbind」というポート111を空けてクライアントからの要求を待ちうけ、要求に応じたプログラムを実行させるデーモンがあがります。 一方、クライアント側でも、NFSクライアントデーモンを起動させると、同じく「rpcbind」が起動されます。 クライアント側でのrpcbindが起動する理由とはなんなのでしょうか。
- ベストアンサー
- Solaris系OS
- TCP通信
OS:Win2000、VisualBasic.netで開発しています。 現在TCP通信のプログラムを製造しています。 TCPサーバとTCPクライアントのテストアプリケーションを作成し、接続テストを行っているのですが、 サーバとクライアントの接続、データ送受信の確認はできました。 しかし、一度クライアント側から接続を切断(ソケットを消去)し、 再びソケットを生成してコネクト要求を出しても接続が確立できません。 このときサーバ側はなにも操作していません。 終始接続待機状態にしてあります。 ソースがないと分かりにくいかもしれませんが、 何か思い当たることがある方、アドバイスよろしくお願いします。
- ベストアンサー
- Visual Basic
- サーバプログラム
C言語の初心者です。 OS : CentOS 5.3 c言語でサーバ用のプログラムを書きました。 ソケット通信で接続してきたクライアントにデータをそのまま返すと言うものです。 コンパイルしたソースが、 gcc -Wall -o example example.c だとすると、この exampleソースを サービスとして( 「デーモンとして」と言うのか? )、起動したい場合、 どのように起動すればよいのでしょうか? ./example と叩くだけだと、叩いた間だけしかプログラムは動いてくれませんよねぇ。 また、サーバプログラムの良書を教えていただけたら幸いです。 初歩的な事でしたら申し訳ないですが、 よろしくお願いします。
- 締切済み
- Linux系OS
- TCPサーバ bind関数のエラーについて
簡易TCPサーバをC言語で構築しています。 サーバ側のプログラムを実行し、クライアントから要求があった(GET / HTTP/1.0)場合に文字列をクライアント側に送信します。テスト一回目は要求通りの機能を果たし無事に終了できました。しかし、1回目と同じように2回目も実行すると、bind()関数でエラーが出ます。自分では一回目の接続で使ったポートが使用され続けてしまっているので、2回目の接続が前の接続に阻まれている(?)のが原因では無いかと思うのですが、これは何が原因なのでしょうか。いくら考えても分かりません。教えて下さい。
- ベストアンサー
- C・C++・C#
- Javaプログラム同士のプロセス間通信について
Java初心者です。 デーモン化したJavaプログラムとJavaサーブレット間のプロセス間通信を 行いたいと思っていますがどのようにしたものか悩み中です。 ○デーモン化したJavaプログラムは、 1、あるポートからSocket通信でデータを受信し、受信したデータをDBに格納する 2、クライアントからの要求で1で保存したデータを加工して送信 ○サーブレットプログラムでは、 上記のデーモン化プログラムの設定等をブラウザ上から変更できるようにしたいと考えています。 設定とは、例えば受信したデータを全てDBに保存せずに ブラウザから条件を設定できてフィルターするような動作に変更できたり、 また、デーモン化プログラムの動作をブラウザ上から停止、開始できるようにしたいのです。 上記の様な構成の場合にプロセス間通信をする必要があると思いますが、 どの様なプロセス間通信を使えばいいのか悩んでいます。 ほんとうは上記の様な2つのプログラムを1つのプログラムで出来ればいいなぁ~と考えているのですが、、 実現方法が判りません。。 なにか名案はございませんでしょうか? わかりづらい説明でもうしわけございません。 参考になるかわかりませんが、イメージ図を、 <イメージ図> デ data 開 data ク ー --------> 発 --------> ラ タ 中 イ 鯖 鯖 アント ↑ | |設定変更 | 管 └--------- 理 者 よろしくおねがいします。
- ベストアンサー
- Java
- Daemonの由来、語源とは??
サーバがクライアントからの要求をまつプロセスを「デーモン」と言いますが、これがなぜ、デーモンと呼ばれているんでしょうか。どなたか語源について御存知な方はいらっしゃいませんでしょうか。そして、その語源からデーモンの役割とのつながりを御教授宜しく御願いします。
- ベストアンサー
- Solaris系OS
- TCPクライアントサーバプログラムで受信したデータを処理するには?
javaのTCPのクライアントサーバのプログラムでよく見かけると思いますが、データをクライアントもしくはサーバから受け取ったとき、それを表示させるには cont = true ; while (cont) { try { // 読み込み (サーバorクライアントからのデータ) int n = instr.read(buff); // System.outへの書き出し System.out.write(buff, 0, n) ; //↑このデータを使いたい↑ } // 以下は例外処理です catch(Exception e){ // 読み出し終了時にループも終了します cont = false ; } という風にすればできるのですが、読み込んだデータを利用して処理(具体的には文字列(String)として処理したい)するにはどうすればいいのでしょうか? プログラミングに詳しい方教えて頂けないでしょうか?
- 締切済み
- Java
- ConnectNamedPipeの接続待ち
はじめまして。 名前付きパイプを用いた、 サーバ側、クライアント側のプログラムを作成しています。 開発言語はVB6.0です。 サーバ、クライアント間の接続、データの送受信など、 ある程度のことは出来るようになったのですが、ひとつ問題が発生しました。 現在、サーバ・クライアント間の接続には、 サーバ側でConnectNamedPipe関数により、クライアント側の接続を待機し、 クライアント側でCreateFile関数で接続する、という方法を取っています。 この方法で一応接続は上手くいっているのですが、 サーバ側で、クライアント側の接続を待機した状態で、 クライアント側からの接続が行われない場合、 サーバ側のプログラムはConnectNamedPipe関数で、 いつまでも待機状態になってしまい、プログラムを終了することが出来ません。 そこで、ConnectNamedPipe関数の接続待ちにタイムアウト時間を設定する、 もしくは手動でキャンセルする、ということを行いたいのですが、 良い方法が見つかりません。 どなたか分かる方いましたらご解答宜しくお願いします。
- 締切済み
- C・C++・C#
お礼
ありがとうございます。 デーモンで期待どおりの動作が出来ました。 xinetd について深い理解だとおもいますので、しばらくそれについて調べてみます。 又、tatsu99 さんも長きに渡り回答してくださり本当にありがとうございました。