- ベストアンサー
UniXとWindowsのプロセス間制御について
今現在unixのC言語ベースで作成されたシステムを一部windowsのJava言語ベースに移行することを考えています。 概要は、 1.Unixで作られたGUIより、Windows側に処理の実行パラメータを送信。 2.Windows側でそのパラメータを受信し解析し適切な処理を行う。 3.処理結果を再度Unix側へ送信。 Unixからのパラメータ送信は、複数台ありWindows側は1台のマシンにて処理を行うことになります。 言語はすでに確定しており、unixとwindows間でのプロセス管理を行うための最良の方法の選択に困っています。 私が調べた中では、Winsock2もしくはJavaのSocketを使うなどのいくつか方法があるようなのですが。 どの方法を選択するのか最良なのか教えてください。 もし上記事例が載っているサイトなどがあればあわせて教えていただけると助かります。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Javaを使ってTCPなら、自然とJavaのAPIのSocketを使うことになると思いますが、逆にそれではまずい理由があるんでしょうか。 今までに書かれた範囲では特に問題は無いと思いますけど。 ちなみに、何を使ったとしても最終的にはWinsock2が動作していることには違いはないと思います。 そもそもJavaで直接Winsock2を使えますか? JNI使ってC等で書かれた物を呼び出すぐらいしかなさそうな気がしますが。 実現方法ですがOSのシステムコールかどうかは通常は別に重要ではないと思います。 Windowsでは例えばWin32APIはシステムコールに相当するのか、単にDLLとライブラリなのかとか。 私が見た感じだとそんなことより、Windows側のプログラムがどういう実現方法とるかの方が気になります。 今までのシステムがもともと複数ホストでのサーバークライアント動作してるなら別ですが。 そもそもネットワークプログラミングの経験がなさそうに感じますし。
その他の回答 (2)
- terra5
- ベストアンサー率34% (574/1662)
こういう場合はプロセス間通信とは呼ばないと思いますが。 呼ぶとすればホスト間通信でしょうか。単にネットワークの話ですね。 また、プロセス管理というより、単なるサーバークライアントシステムの実現方法の話だと思いますが。 プロセス管理というと少なくても、どれかが他のプロセスに対して起動、停止といったことを行うと考えられますが、たんにデータのやりとりを行うだけのように思えますし。 この辺の用語を正しく使えてないと目的の情報は探せないと思います。 で、最良の方法ですが、いろいろな条件によりますからこれだけの情報では誰も判断できないと思います。 要求される性能、データ量、反応速度、マシンスペック、システムの規模、伝送経路、通信頻度、信頼性等いろいろと考える必要があります。 あと、個人的に言えばUNIXでGUIでWindowsでJAVAでサーバー機能(?)というのは逆な感じがしますけど。 いろいろな理由があるのかも知れませんが。
お礼
回答ありがとうございます。 当方UnixとWindowsでの連携プログラムの経験がないことから、その連 携部分についての知識が乏しいと自分でも理解しています。 確かにご指摘の通り今回の件についてはネットワークの話になるのかも しれません。 もともとUNIXベースだったシステムを今回の開発で内部処理系のみ WINDOWS化し、今後GUIの移行も計画することです。 順番が逆ではと疑問に思うかもしれませんが、予算の都合もあり 用件ですのでこれは致し方ないかと思っています。 処理の概要ですが、 1.N台のクライアント(Unix,C言語ベースのGUI)より、処理の発行依 頼が発生します。 Unix側で行う処理は ・GUIによるパラメータの設定 ・Windowsへのパラメータの送信 ・処理結果をWindowsより受信し、再度GUIへ表示 2.その情報をWindows側(Java)で受け取り、パラメータを解析し適切な 内部計算処理を実行するよう指示をだします。 ※ 内部計算処理はGUIからのデータにより、3種類の異なるPGを呼び 出します。 3.2で処理を行った結果を再度、Unix側に渡します。 4.3で受け取った結果情報をGUIに表示する。 Windows側のシステムは、クライアント側からの発行以来があるたびに、 内部処理を行い、結果を返すシステムであり、対象となるクライアント はN台となります。 環境については、 ・Windows側 OS:Windows2003 server アプリ:J2SE(TM):Java(TM) 2 Platform, Standard Edition Ver1.4 マシンスペック:未定 性能及び、反応速度については特に指定はありません。 ・Unix側 OS:Solaris8 言語:C 通信方法:TCP/IP なおデータ量については、 入出力時ともにその情報量は最大2MB程度だと予測しています ご指摘の通り、UnixとWindowsとのデータの授受ができれば、問題がな いと考えています。 N台のクライアントより処理の実行が要求されますが、これについては 今回の質問とは趣旨が違いますので、割愛しまします。
- angband
- ベストアンサー率51% (86/168)
>Winsock2もしくはJavaのSocketを使うなどのいくつか方法 > プロセス間通信では、WindowsのWinsock2 APIでも Javaのソケットでも「同じ方法」だと思いますが・・ 「別の方法」としては今ならXMLを使う「WEBサービス」 くらいでしょうか・・ 現在のシステムはソケット(TCP)上に、さらに別のパケット (独自にデザインされた)が載ってるのですか?
お礼
回答ありがとうございました。 >プロセス間通信では、WindowsのWinsock2 APIでも >Javaのソケットでも「同じ方法」だと思いますが・・ この記述についてですが、ソケットプログラミングにおける UNIX と Windows の最大の違いは、UNIX が OS レベルでソケットをサポートし ている一方で、Windows は Winsock というライブラリを使用して実現し ているという事。つまりは、同じSoketという昨日をWindowsの場合は、 ライブラリとしてWinsockを使うことで実現可と認識してもよろしい ですか? >現在のシステムはソケット(TCP)上に、さらに別のパケット >(独自にデザインされた)が載ってるのですか? 現在のシステムはTCP以外のパケットは使用していません。
お礼
返事ありがとうございました。 当方ネットワークプログラミングはお察しの通り経験がありません。 今回全てが初めての経験ですので、イマイチ分かっていませんが、その後自分で調査して一応JavaでのWindows同士でのデータの授受は出来るようになりました。 まだ対Unixとの確認は取れていないのですが、何とか切り抜けられそうです。 実現方法はいろいろなご意見があるかとは思いますが、今回既に決定事項で動いている関係上制約も多く。 移行する側でも苦労してるのは確かです。 また質問があれば別のQAとして教えていただければと思います。