• ベストアンサー

UniXとWindowsのプロセス間制御について

今現在unixのC言語ベースで作成されたシステムを一部windowsのJava言語ベースに移行することを考えています。 概要は、 1.Unixで作られたGUIより、Windows側に処理の実行パラメータを送信。 2.Windows側でそのパラメータを受信し解析し適切な処理を行う。 3.処理結果を再度Unix側へ送信。 Unixからのパラメータ送信は、複数台ありWindows側は1台のマシンにて処理を行うことになります。 言語はすでに確定しており、unixとwindows間でのプロセス管理を行うための最良の方法の選択に困っています。 私が調べた中では、Winsock2もしくはJavaのSocketを使うなどのいくつか方法があるようなのですが。 どの方法を選択するのか最良なのか教えてください。 もし上記事例が載っているサイトなどがあればあわせて教えていただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.3

Javaを使ってTCPなら、自然とJavaのAPIのSocketを使うことになると思いますが、逆にそれではまずい理由があるんでしょうか。 今までに書かれた範囲では特に問題は無いと思いますけど。 ちなみに、何を使ったとしても最終的にはWinsock2が動作していることには違いはないと思います。 そもそもJavaで直接Winsock2を使えますか? JNI使ってC等で書かれた物を呼び出すぐらいしかなさそうな気がしますが。 実現方法ですがOSのシステムコールかどうかは通常は別に重要ではないと思います。 Windowsでは例えばWin32APIはシステムコールに相当するのか、単にDLLとライブラリなのかとか。 私が見た感じだとそんなことより、Windows側のプログラムがどういう実現方法とるかの方が気になります。 今までのシステムがもともと複数ホストでのサーバークライアント動作してるなら別ですが。 そもそもネットワークプログラミングの経験がなさそうに感じますし。

kazuha4649
質問者

お礼

返事ありがとうございました。 当方ネットワークプログラミングはお察しの通り経験がありません。 今回全てが初めての経験ですので、イマイチ分かっていませんが、その後自分で調査して一応JavaでのWindows同士でのデータの授受は出来るようになりました。 まだ対Unixとの確認は取れていないのですが、何とか切り抜けられそうです。 実現方法はいろいろなご意見があるかとは思いますが、今回既に決定事項で動いている関係上制約も多く。 移行する側でも苦労してるのは確かです。 また質問があれば別のQAとして教えていただければと思います。

その他の回答 (2)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

こういう場合はプロセス間通信とは呼ばないと思いますが。 呼ぶとすればホスト間通信でしょうか。単にネットワークの話ですね。 また、プロセス管理というより、単なるサーバークライアントシステムの実現方法の話だと思いますが。 プロセス管理というと少なくても、どれかが他のプロセスに対して起動、停止といったことを行うと考えられますが、たんにデータのやりとりを行うだけのように思えますし。 この辺の用語を正しく使えてないと目的の情報は探せないと思います。 で、最良の方法ですが、いろいろな条件によりますからこれだけの情報では誰も判断できないと思います。 要求される性能、データ量、反応速度、マシンスペック、システムの規模、伝送経路、通信頻度、信頼性等いろいろと考える必要があります。 あと、個人的に言えばUNIXでGUIでWindowsでJAVAでサーバー機能(?)というのは逆な感じがしますけど。 いろいろな理由があるのかも知れませんが。

kazuha4649
質問者

お礼

回答ありがとうございます。 当方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)
回答No.1

>Winsock2もしくはJavaのSocketを使うなどのいくつか方法 > プロセス間通信では、WindowsのWinsock2 APIでも Javaのソケットでも「同じ方法」だと思いますが・・ 「別の方法」としては今ならXMLを使う「WEBサービス」 くらいでしょうか・・ 現在のシステムはソケット(TCP)上に、さらに別のパケット (独自にデザインされた)が載ってるのですか?

kazuha4649
質問者

お礼

回答ありがとうございました。 >プロセス間通信では、WindowsのWinsock2 APIでも >Javaのソケットでも「同じ方法」だと思いますが・・ この記述についてですが、ソケットプログラミングにおける UNIX と Windows の最大の違いは、UNIX が OS レベルでソケットをサポートし ている一方で、Windows は Winsock というライブラリを使用して実現し ているという事。つまりは、同じSoketという昨日をWindowsの場合は、 ライブラリとしてWinsockを使うことで実現可と認識してもよろしい ですか? >現在のシステムはソケット(TCP)上に、さらに別のパケット >(独自にデザインされた)が載ってるのですか? 現在のシステムはTCP以外のパケットは使用していません。

関連するQ&A

  • C言語(Windows)からUNIXに移植したことある人

    C言語(Windows)からUNIXに移植したことある方はいらっしゃいますか? ある方がいらっしゃいましたら、移行の仕方等教えて下さい。その際の 注意点等ありましたらお願いします。 やろうとしていることは、Windowsの通信制御アプリをSolarisに 移植です。なのでWinsock関係などの情報が知りたいです。 通信制御アプリなのでCUIだと思いますが、もしGUIの場合UNIXではどうなるのでしょうか?

  • Socket通信で、通信終了のイベントが発生しない

    クライアント(Windows)とサーバ(Unix)とSocket通信をするアプリを作っています。処理内容はクライアントのデータファイルをサーバに送信(アップデイト)し、サーバ側でデータを解析し、その結果を印刷するという手順です。 WinSockを使って、送信そのものはうまくいくのですが、サーバでデータを解析し結果を印刷するのに時間がかかり(10秒以上)、その間は送信終了のイベントが発生しません。これはサーバ側での処理を exec関数とwait関数で行っているので、正しい事態なのですが、データの送信が終わったら後はサーバ側で勝手にやって欲しいのです。サーバでの処理を system関数に置換えたり、バックグランド処理にしてもやはり処理が終わるまで送信終了のイベントが発生しません。何かいい方法をお教えください。

  • UNIX INETDを使用して、クライアントAPの作成方法?

    UNIXのINETDサービスを使用して、UNIX側にファイル送信 を行おうとしています。 クライアント側ではWinStockにてUNIX側のInetdサービス に設定したAPにて受信しようと考えています。 クライアント側のAPではINETDに設定されたAPのポートで 接続を行うことで、UNIX側のAPは起動するのでしょうか? できればサンプルプログラムがあれば教えてください。 (クライアント側(Windows2000-C言語)UNIXサーバ(C言語))です。

  • unixからwindowsへリモートシェルを実行したい

    unixからwindows2000serverのプログラム(VBのexeファイル)を リモートで実行したいのですが、何か良い方法がありました教えて下さい。 また、unix側、windows側でインストールすべきS/W等がありました教えて頂けますでしょうか。 よろしくお願い致します。 参考までに、以下の内容は自分で調査しましが、実現には至りませんでした (何かが間違ってるのかもしれませんが・・・)  ・SSH(unix・winそれぞれに設定方法がよくわからない)  ・unixからtelnetログイン(telnetログイン・UID/PASSWD入力・winプログラム   実行を自動化(シェル化)の仕方がわからない)  ・unixからrshを実行(windows2000ではrshを受付けない?)

  • WINDOWSで作ったファイルをUNIXで開く

    LatexとTgifで解説とフローチャートを作成し、できたファイルをPDFに変換して提出するという課題があるんですが、学校はUNIX(SunOS)で家のパソコンはWINDOWSです。ですので A.LatexとTgifでフローチャートらを作成し、   それをPDF化する。 B.他の作図ソフトでフローチャートらを作成し、   それをPDF化する。 ということをWINDOWS環境で行う方法を教えていただけないでしょうか。(できれば、使うソフトの説明があるサイトも) つまり、UNIX環境で開ける"解説とフローチャートが描かれたPDFファイル"をWINDOWS環境で作ればいいわけです。 (PDFファイルなら、それがWINDOWS環境で作ったものであってもUNIX環境で開く事はできるんですよね。)

  • C言語でホスト(Unix)にプログラム/プロセスを送信して実行する方法

    C言語でホスト(Unix)にプログラム/プロセスを送信して実行する方法を探しています。 用途はまだ具体的に決まってませんが 例えば、ある与えられたコマンドを各ホストに一斉送信して その結果をまとめて取得する、ようなことがしたいです。 どんなに難しくなってもいいので、いい方法や関数があったら教えて下さい。

  • Winsockの通信処理にてファイル転送方法?

    環境:Windows2000とUNIXサーバ 開発:VisualStadioVer6.0 言語:C言語 やりたいこと:    クライアントからサーバにファイル送信を行う。 ただし、FTP通信を使わないで、別ポートにて、Winsockの send等でFTPもどきのファイル送信を行いたい。 ソケット通信はデータ送信なのは知っているのですが、 どうしても実現したいので、知ってる方は教えてください。

  • unixのファイルをwindowsで使用したい

    unixのパソコンから拡張子が.preのものをFDにとりWINDOWSパソコンに持ってきてメール(OUTLOOK)に添付しようとすると「要求されたセクタがみつかりません」となり添付できません。 UNIXマシーンでFDにコピーしWINDOWS上でそ操作しうる方法についてご教示ください。

  • ターゲットがUNIXなんですが、Windowsで開発をするには?

    UNIXでC言語を使用してXwindowアプリを開発しているのですが、 効率があまり良くないので、Windowsの統合環境で開発できないかと考えています。 実現するヒントとか、すでに構築済みという方がいらっしゃいましたらご教授願えますでしょうか? UNIXマシンのスペックがそんなに高くなく(Pentium3 600MHz/RAM256MB)、 またOSがEclipseなどもサポートしていないので仕方がなく、viとEmacsで開発しています。 コンパイラはgcc、デバッガはgdbを使用しています。 作成しているのはコンソールアプリではなく、Xwindowのアプリです。 理想はWindows上で、Eclipseのような統合環境上でソースを編集し(ソースはUNIXマシンからSambaで参照)、 リモートでビルドを行い、Windows側でブレークを貼りデバッグできればとても快適です。 ちなみにWindowsマシンのスペックは悪くないです。 Pentium4 2.4GHz/RAM512MB です。

  • 他所のUNIX端末を外からGUIでコントロールしたい

    やりたいことは 「他所のUNIX端末をWindowsPCから動かしたい、しかもGUIベースで」 ということです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=246895 を見たのですが、ここにあるソフトたちは全部自分のほうにSorarisをいれた場合で微妙に違います。 elnetはすでに効く環境、通信したいのはWindows2000とSoraris2.7」です。 よろしくお願いします。