問題タブ [sunrpc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Sun RPC: バイナリ ファイルの転送
バイナリ ファイルをリモート サーバーに転送したい。コードに SUN/ONC RPC (Linux では rpcgen) を使用しています。C を使用しています。サーバーとクライアント用のコードを書きましたが、テキスト ファイルでは機能しますが、バイナリ ファイルを転送しようとすると、転送後にファイルが破損していると表示されます。データ チャンクを文字配列または XDR 文字列に格納しています。データを文字配列として保存することに問題があると思います。誰かが私に何が問題なのか教えてもらえますか? 誰か助けてくれませんか?
私がやっていることを見たい人がいる場合は、参照用にコードスニペットをここに添付します。
私の IDL:
私のサーバー:
私の顧客:
python - rpcbind 認証の問題
rpcbind
Arch linux で (SunRPC)を使用しており、Python rpc.py
(標準の python ソケット モジュールを使用) インターフェイスを使用して通信しています。に登録または登録解除のリクエストを送信しようとするたびにrpcbind
、セキュリティ上の理由で拒否されたというメッセージが表示されます。rpcbind
すべてが機能する唯一の状況は、非セキュア モード ( ) で呼び出す場合ですがrpcbind -i
、すべてをセキュア モードで機能させたいと考えています。rpcbind データシートから、ループバック アドレスからのみセキュア モードで要求を行うことができるという情報を見つけましたが、そのようなソケットを作成するために知っていたすべてのアプローチを試しましたが、すべて失敗しました。rpcbind
セキュア モードでに接続するにはどうすればよいですか?
linux - Linux 上の Groovy から呼び出された C プログラムで RPC 呼び出しが失敗するのはなぜですか?
C で書かれたプログラムがあり、RPC を使用して、同じ Linux サーバー上の別のプログラム (これも C で書かれています) と通信します (一部の実稼働セットアップでは、2 番目の C プログラムは別のマシンにあるため、IPC ではなく RPC になります)。
他の C プログラム、CRON、またはコマンド ラインから呼び出された場合、期待どおりに動作し、長年にわたって動作しているため、一般的に動作すると言っても過言ではありません。
Groovy スクリプトから呼び出された同じプログラムが、明らかにネットワークの問題で失敗します。
C プログラムでは、svc_register(xprt, prognum, versnum, dispatch, protocol)
成功しますが、
- リクエスト後の RPC サーバー:
clnttcp_create
「接続が拒否されました」で失敗する - 応答を待っている RPC クライアント:
select
on でsvc_fdset
失敗しますEBADF
Groovy プログラム (完全を期すために、ここではあまり説明しません):
問題を特定して解決するには、どうすればよいでしょうか?
c - SunRPC は、一方向のメッセージングを有効にします (ストリーミング/バッチ処理?)
Linux (RHEL 4/5) で SunRPC を使用するいくつかのサービスを高速化したいと考えています。
私たちの RPC 呼び出しは戻り値を必要としませんが、RPC の性質上、とにかく常に ack が送信されます。これにより、最近問題になっている遅延が発生します。信頼できるトランスポート (TCP) で実行する場合、RPC 応答によって発生する遅延を回避したいと考えています。
ここのドキュメントは、Solaris がそれを可能にする「oneway」キーワードを持っていることを示していますが、Linux/glibc はこれをサポートしていないようです。
Linux で SunRPC を使用して「ストリーミング」または一方向メッセージングを有効にする方法はありますか?
design-patterns - Client-Dispatcher-Server アーキテクチャとしての SunRPC メカニズムの制限と Broker との比較
デザインパターンに関する本(旧版)「パターン指向のソフトウェアアーキテクチャ」を読んでいます。Client-Dispatcher-Server に関する章では、SunRPC は Client-Dispatcher-Server アーキテクチャとして引用されており、ポートマッパーは Client-Server ネゴシエーションで Dispatcher として機能します。SunRPC がどのように機能するかは多かれ少なかれ知っていますが、SunRPC を実際に使用したことはありません。
3 つの質問があります。
- Client-Dispatcher-Server メカニズムとしての SunRPC のソフトウェア制限 (インターフェイスと機能の観点から) は何ですか?
- 同じ Client-Dispatcher-Server アーキテクチャ (言語に関係なく) を達成するために、今日同様に優れたシステムは何ですか?
- Broker アーキテクチャと Client-Dispatcher-Server アーキテクチャの本質的な違いは何ですか?
質問が多く、複雑であることは承知しています。独立した質問に分割することも考えましたが、この提出のポイントは、典型的なケースとして特定の例 (SunRPC) を使用して、一般的なアーキテクチャの原則と制限についてです。これらの考慮事項により、猶予期間中の回答に対する満足度に関係なく、機会があればすぐに 100 担当者のバウンティを設定することを事前に発表します。
multithreading - MFC を使用した ONC RPC SVC_RUN() のクリーンな終了
私はマルチスレッド コードにかなり慣れていないので、誰かが私の問題を解決してくれることを願っています。
ONC/RPCサーバーとその他のもので構成されるマルチパートプログラムがあります(「もの」は私の質問には関係ありませんが、サーバーのプログラムに含まれている必要があります)。svc_run() は決して戻らないので、それを独自のスレッドに入れ、プログラムの最後で単にスレッドを終了して、次の作業に進むことにしました。
ただし、私のプログラムは拡張されており、スレッドを終了するのではなく、ONC/RPC サーバーをクリーンかつ安全に終了またはクローズしたいと考えています。ただし、svc_run() から安全に戻る方法がわかりません。誰でもこれを手伝ってもらえますか?
同じ問題を抱えている他の人を何人か見つけましたが、誰も彼らに応答していないようです. svc_run() を server_process() 関数と同じファイルに単純に移動しようとしましたが、fd_set の構造が正しく設定されず (すべてが 0)、関数が失敗します。
svc_run() は、http ://sourceforge.net/projects/oncrpc-windows/ にあるコードで作成された dll で定義されています。
コードの関連要素を提供しています。また、svc_exit() は、私が現在使用している onc/rpc システムの一部ではないようです。
長い質問で申し訳ありませんが、よろしくお願いします。
レックス
これが私のコードです:
rpc - 同じポートで複数のSunRPC(ONC-RPC)プログラム番号を使用できますか?
ONC RPCヘッダーには、呼び出しを識別するためのプログラム番号、バージョン番号、およびプロシージャ番号が含まれています。通常、さまざまなRPCプログラム(サービス)がさまざまなプロセスによって実装されるため、プログラムはさまざまなTCP/UDPポート番号にマップされます。1つのプロセスが複数のRPCプログラムを実装している場合、それらすべてに同じポートを登録して使用できますか?プログラム番号は、正しいサービスに逆多重化するのに十分なようです。
そうすることの実際の例はありますか?
c - SUN RPC(ONC / RPC):Cでnullプロシージャを使用してラウンドトリップ時間(またはping)を計算する
クライアントとサーバー間のRTT(ラウンドトリップ時間)を計算または見積もるにはどうすればよいですか?
これに対処するチュートリアルまたはサンプルも役立ちます。
c - SunRPCを介したバイナリファイルの送信
SunRPCを使用して小さなクライアントサーバープログラムを実装しようとしています。私が望んでいる機能の1つは、クライアントが任意の形式のファイルをサーバーにアップロードできるようにすることです。
今私はこの仕様を持っています:
そしてこれは私のクライアントです:
問題は「in.file=read_file(argv [5])」ステートメントにあります。次のようなコンパイラエラーが発生します。
タイプ'char*'からタイプ'struct'に割り当てる場合の互換性のないタイプ</p>
だから私の質問は、彼はどのようなポインターが必要ですか?
ありがとう!
ライナス
c++ - RPC:配列が大きすぎる場合のxdr_bytes「引数をエンコードできません」
RPCを介して配列を送信しようとしていますが、データ配列が大きくなると「RPC:引数をエンコードできません」というメッセージが表示されます。私が見たものから10Kb未満。
これは失敗する行です。
参照されている構造体は次のとおりです。
このエラーを修正する方法、または任意の大きな配列を送信する別の方法はありますか?