• ベストアンサー

フローチャートの書き方

TCP通信のソケットシステムコールでselectを使用して いるのですが、データ受信待ち状態で 【t秒経過してデータを受信しなかったらA処理をする】 【データ受信したら、B処理をする】 の2つの処理があるのですが、フローチャートをどのように書けばいいのか分かりません。 どなたかご教授願いますm(__)m

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

  • ベストアンサー
回答No.2

selectはプリミティブな(つまり分解できない)機能ですから、そのまま書けばいいのでは?selectを使うという時点で、t秒たたなくても受信されればselectを抜けることは、わかっている人なら知っています。 つまり、 select(2)でt秒まつ 受信bitが1ならばA そうでなければB じゃないですか?

SafeGuard
質問者

お礼

ありがとうございます。selectの特徴を 活用したいい解答ですね^^助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

1. カウンタを クリア 2. 1秒後にカウンタを+1する。 3. t秒になったか? Y → A処理をする。 4. データを受信したか? Y → B処理をする。 N → 2.に行く。 質問には、B処理の後に何をするかかかれてないので、 場合によっては データの受信のフラグが必要となるでしょう。

SafeGuard
質問者

お礼

selectによらず時系列フローチャートで活用できそうです。参考になります。 ありがとうございました。(^^)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • フローチャート

     最大値と最小値について (1)データ数Nの入力 (2)N個のデータの入力 (3)仮の最大値と仮の最小値の設定 (4)最大値と最小値の検索 (5)結果の出力 このプログラムのフローチャートがレポートに出されたんですが、全く分かりません。 よろしくお願いします。 ちなみに情報処理用流れ図記号(JIS)は処理、判断、準備、定義済み処理 手操作処理 入出力 書類 紙カード 紙テープ 表示 通信 結合子 端子って書いてありました。

  • 初めまして。HPUX11iv2サーバを使ってTCP通信のプログラム開発

    初めまして。HPUX11iv2サーバを使ってTCP通信のプログラム開発を行い始めたものです。 selectの挙動について質問があります。 下記のようにselectの戻りが正常の場合にどのソケットが読み取り可能か調べるプログラムで一番したのelseケースは発生するものでしょうか?(タイムアウト以外で何も読み取り可とならないパターン) 私の書いたプログラムでは発生しています。それが自分のバグでそう動いてしまっているのか、そう動くパターンがあるのか調べて判断がつかなかった為、質問させていただきました。もしわかる方いらっしゃいましたら回答を宜しくお願いいたします。 ret = select ( nfds, &readfds, 0, 0, null ); if ( ret > 0 ) {  if ( FDISSET( procfd, &readfds ) ) // UNIXデータグラムソケット  {   // プロセス間メッセージ受信処理  }  else if ( FDISSET( listenfd, &readfds ) ) // Listen用ソケット  {   // accept処理  }  else if ( FDISSET( tcpfd, &readfds ) ) //TCP送受信用ソケット  {   // TCPメッセージ受信処理  }  else  {  } }

  • TCP/IPプログラミングでのselectについて

    selectは使用しているソケットのディスクリプタを登録させれば、send、writeシステムコールからのデータの受信等は検知しますよね。 では、コネクション要求(connect)は、検知するのでしょうか? どなたか回答よろしくお願いします。

  • TCP通信の切断の検出について

    現在javaでTCP通信でサーバーに接続するタイプの大富豪を製作しております。 そこでTCP接続の切断の検出についてお聞きしたいです。 例えば既にあるオンラインのテーブルゲームなどをプレイしていると、誰かの通信が不安定になるor切断された場合、20~30秒程画面の間、動きが止まり、切断されたプレイヤー以外とのチャット等は可能で20~30秒後に誰かが「落ち」てプレイが続行されます。 この時、バックグラウンドではどのような処理が行われているのでしょうか? (1)TCP接続でデータの送信(受信)を行っているがとあるユーザーは切断されているのでそこが何度も送信(受信)のリトライ→反応なし(ACKを受信できず)→タイムアウトが20~30秒に指定してあり、時間経過後にタイムアウトが呼び出され切断されて続行される。 (2)通信が不安定なユーザーが居て切断/接続を何度も繰り返している。プログラム的に20~30秒不安定な状況が続けば切断するようなプログラムを組んでいる。 (3)その他 また、接続の切断の検出はサーバープログラムのどこで行われるのでしょうか。 (1)各接続クラスのInputStream.readもしくはOutputStream.write (2)Socket接続が切断されればどこかで例外が発生する? (3)その他 詳しい方居られましたら教えて頂けると幸いです。

  • vb2010でソケット通信を使いたいのですが

    はじめまして。 vb2010でソケット通信を使いたくて、今TCPサーバーを作っています。 クライアント側から受信した瞬間にサーバー側から返信というのは可能でしょうか。 受信したタイミングで接続が切れてしまって困っています。 初めてソケット通信に触れてイマイチ分かってないので説明がうまくいきませんが、 どなたかわかる方がいらっしゃいましたらご回答よろしくお願いします。

  • C++ TCP受信 突然切れる

    C++のTCPソケット(recv関数)を使ってサーバからデータを定期的に受信する クライアントを作っているんですが、データの受信中?に突然TCP接続が 切れることがあります。 より正確にはrecvの戻りが0(sizeが0=切断された)になってしまいます。 物理的に配線が切れたとかでもなく、誰も手を触れず放置した状態のときに突然 切れたりとかわけが分かりません。 もしかしてTCPソケットって接続し続けてはいけないとかあるんですかね? 分かる人がいたら宜しくお願いします。

  • TCPでの非同期型select関数について

    マッキントッシュOS-X上で動くTCP通信プログラムを作る場合について教えてください。 ウィンドウアプリを考えています。 ウィンドウ環境なので、アプリがフリーズしてしまわないために、 以下のような非同期処理が考えられます。 この場合、データが来ていなくても、while(1)がぐるぐる回るので 無駄にプロセスを食ってしまうと思うのですが、これはしかたのないことでしょうか。 もっとよい方法がるのでしょうか。 Winsockだとイベント応答関数での受信処理処理ができてエレガントなのですが、 バークレイソケットでは、どうすべきなのか疑問に思い質問させていただきました。 よろしくお願いします。 //ソケットを非同期モードにセット val = 1; ioctl(sock, FIONBIO, &val); while (1) {   memcpy(&fds, &readfds, sizeof(fd_set));   select(2, &fds, NULL, NULL, NULL);   // sockに読み込み可能データが届いている場合は、受信   if (FD_ISSET(sock, &fds)) {     memset(buf, 0, sizeof(buf));     recv(sock, buf, sizeof(buf), 0);   }   else{     //受信データがなかったときの処理   } }

  • フローチャートについて

    どうしてもフローチャートが分かりません。教えてください。 給与ファイルを入力し、支給額集計リストを作成するフローチャートです。 (給与ファイル ⇒ 部課別集計表 ⇒ 支給額集計リスト) 入力データ形式 『給与ファイル』 部コード・課コード・社員番号・氏名・支給額              (部コード・課コードは上昇順にソート) 出力データ形式 『支給額集計リスト』(ラインプリンタに出力) --------------------------------------------------- SHIKYUGAKU-LIST(大見出し)   ↓ (5行行送り)   ↓  B-CODE   K-CODE    NO    NAMAE  SHIKYU (小見出し)   ↓ (2行行送り)   ↓ (部コード)(課コード)(社員番号)(氏名)(支給額) (明細)                  (課コード)-KA CODE (課別支給額合計)                  (部コード)-BU CODE (部別支給額合計)                   SO-GOKEI      (総支給額合計) --------------------------------------------------- 処理基準 支給額集計リストは1行間隔で1頁に20件印刷 部コードが変わったら改ページ 頁の先頭に見出し2行印刷 課コードが変わったら見出し文字をつけ、課コードと課別支給額合計を印刷 部コードが変わったら見出し文字をつけ、部コードと課別支給額合計を印刷 最後に乱し文字をつけ、総支給額合計を印刷 とのこんとなのですが、どのようなフローチャートにすればよいのでしょうか? お願いします。

  • 処理の途中で停止させ、再開させたいです(VBA)

    お世話になります。 フォームのコマンドボタンを押すと、処理が始まるVBAを作成しております。 If DCount("*", "T_データ1") > 0 Then MsgBox ("!データ1が存在します!" & Chr(13) & _ "!データ1一覧を表示します!") DoCmd.OpenForm "F_データ1レコード" ● '住所データを振り分ける Call zyushoCheck テーブルにレコードが存在して、フォームが開いた後(●印のところ)、30秒くらい 次の処理まで時間を置き、時間が経過したら、 Call zyushoCheckを開始させる方法を教えてください。 TimeInterval?でできますでしょうか? どうぞよろしくお願いいたします。

  • TCP/IP通信に関する質問です。

    下記の3つのLinuxPCを使って、TCP/IPによるソケット通信のシステムを作成しました。 PC1: IP:192.168.0.1 Port: 20000 TCPサーバ PC2: IP:192.168.0.2 Port: 20000 TCPサーバ PC3: IP:192.168.0.3 Port:ランダム(クライアントなので) TCPクライアント PC3をクライアントとして、同じポート番号を持つアプリが動いている PC1とPC2に繋いで通信をする形です。 このシステムは問題なく動きました。 しかし、続いてPC1とPC2を一つのPCに(ハードウェアとして)まとめたくなったときに、 下記の条件があったとき、どのようにすれば良いでしょうか? 1. PC3のソフトウェアは一行も変更しない 2.りPC1とPC2が同一のハードウェアになっても、それぞれのソケットに流れるデータは変わらない 一台のコンピュータにおいて、一つのNICに複数のIPをふることはできましたが、 同じポート番号のソケットを作成するのはできないと思っています。 今のところ、一台のコンピュータで仮想マシンを二台立ち上げる方法を考えていますが、 それ以外に上手い方法はあるでしょうか? 非常に困っているため、ご回答よろしくお願いします。