友人がクライアント側をプログラミングしているときに、C を使用してグループ チャット システムのサーバー側をプログラミングしようとしています。サーバーが受信するクライアント接続ごとに、子プロセスをフォークして、クライアントを処理し、さらにクライアントを受け入れ続けるようにします。
サーバーは、現在接続されている各クライアントにすべてのオンライン ユーザー (接続されているクライアント) のリストを送信する必要があるため、パイプを使用しました。基本的に、子プロセスが作成されると、ソケットを介してクライアントから情報を受け取り、パイプを介してすべてのクライアントのリストを保持している親にその情報を送信します。このリストは、クライアントがチャットの開始や切断などの変更を行うたびに更新する必要があります。たとえば、クライアントが切断された場合、子はパイプを介して親にメッセージを送信し、親はリストが更新されるように必要な操作を行います。新しい接続ごとにパイプが作成されることに注意してください。
私の問題は、たとえば、3 つの接続を次々に受信し、2 番目の子が切断された場合、そのような親は 2 番目の子とは異なるパイプを持っているため、親がパイプから情報を読み取っていないことです。(3 番目の接続が行われたため、新しいパイプが作成されたことを思い出してください)。この問題を解決するにはどうすればよいですか?
また、1 つの共通パイプを作成しようとしましたが、読み取り/書き込みの前にパイプを閉じないとエラーが発生し、それらを閉じると、パイプが閉じられるため、2 番目のクライアントが接続したときにセグメンテーション エラーが発生します。
私は何時間も無駄に探していたので、どんな助けも大歓迎です.
ありがとう。