0

クライアントが1つのサーバーに情報を送信し、サーバーがメッセージを受信して​​他のすべてのサーバーに転送する分散システムを作成しようとしています。システムは、インターフェイス定義言語としてRPCとXDRを利用します。

サーバーがメッセージを受信する部分を取得しました。しかし、メッセージを他のサーバーに転送できません。メッセージを転送できたとしても、クライアントがその特定のサーバーにメッセージを送信した場合、つまりそのメッセージと一緒に送信された場合にのみ出力されます。

例:サーバーAにHelloというメッセージを送信すると、サーバーAはそれをサーバーBにも転送することになっています。サーバーBはメッセージを取得し、印刷しません。代わりに、サーバーBに メッセージHiを送信すると、 HELLOHIが出力されます。これは、Bがメッセージを受け取り、それを完全に印刷しなかったことを意味します。

なぜそれが起こっているのかについての提案はありますか?rpc_broadcastクライアントから受信したメッセージを他のサーバーにブロードキャストするために使用しています。

Edit1:これは、すべてのサーバーがブロードキャストを受信したときに呼び出そうとするメソッドです。ロジックを実装する前に、静的なHELLO THEREを印刷して、動作するかどうかを確認しようとしています。

int *
pass_details_1_svc (xaction_args *argp, struct svc_req *rqstp)
{
    int *i;
   printf("HELLO THERE");   
   return i;
}

クライアントからメッセージを受信したときに行うrpc_broadcast呼び出しは次のとおりです。

xaction_args ag; ag.passMsg="こんにちは";
rpc_broadcast(others、TICKER_PROG、TICKER_VERS、PASS_DETAILS、(xdrproc_t)xdr_xaction_args、&ag);

passMsgXDRファイルで定義された構造体の変数です。

4

1 に答える 1

1

\ nを追加すると、現在のprintfバッファがフラッシュされるため機能します。通常printfを呼び出す場合、OSがすぐにそれを出力する必要はありません。しばらくの間バッファリングし、予測できない時間に実行する可能性があります。印刷バッファをフラッシュアウトすると、すぐに印刷できます。

または、perror()など、バッファリングされていないシステムコールを使用することもできます。

だからそれはちょっと面白くありません、それは設計による標準的な論理的な振る舞いです

于 2012-10-23T09:29:38.897 に答える