0

オーディオデータを処理してオーディオドライバーに渡すサーバープログラムがあります。

サーバー プログラムはオーディオ データをコピーし、そのコピーを名前付き FIFO に数秒のスレッドで格納します。

FIFO の反対側にクライアント読み取りがない場合は、FIFO スレッドをブロックするだけなので問題ありません。

次に、「音量を上げる、再生を速くする」などの「コントロール」機能を追加したいと思います。そのため、最終的に接続されたクライアントはサーバープログラムを制御できます。

重要なことは、クライアントが最終的に (close() または中止によって) 切断した場合、サーバーはこれを検出し、通常モードに戻り、クライアントからのすべてのコマンドを忘れる必要があることです。

今までソケットを使用したことがないため、何が最善の方法かわかりません。

  1. サーバー→クライアントのFIFOをそのまま使い、クライアント→サーバー通信専用のソケットを追加?

  2. 1 つのソケットを使用してサーバー -> クライアントをストリーミングし、クライアント -> サーバーからコマンドを提供します (バイト形式で?)

ソケットには「AF_UNIX, SOCK_STREAM」を使用します。#2はより良いバリアントですか?また、クライアントが close() なしで切断されたかどうかを判断するにはどうすればよいですか?

4

1 に答える 1

0

私はオプション番号2に投票し、その解決策は次のとおりです。

1-ソケットの作成[sock_stream ....];

2-fork()[ソケット記述子を継承];

-father[use to read];
-son[use to write];

ソケット記述子からの read() が 0 バイトを返したときにクライアントの切断を検出するように実装できます。

于 2013-05-07T12:50:57.873 に答える