.NETでのプロセス間通信とは?

このQ&Aのポイント
  • 現在、VC++.NET2003を使用してのプロセス間通信を行うアプリを作成しています。
  • アドレスをパラメータで送れる通信方法を教えていただきたいです。
  • 挙げられた通信方法は、ソケット、メッセージキュー、イベント、メッセージウインド、パイプなどです。
回答を見る
  • ベストアンサー

.NETでのプロセス間通信

初めまして。皆様の知恵をお借りしたく質問させていただきます。 現在VC++.NET2003を使用してのプロセス間通信を行うアプリを作成しています。 プロジェクトはWindowsフォームアプリケーション(.NET)です。 そのときアドレスをパラメータで送れる通信方法を教えていただきたいのです。 とりあえず自分で調べて出てきた通信方法を挙げます。 1.ソケット(TcpListenerとTcpClientを使用のもの) 2.メッセージキュー(MessageQueueを使用のもの) 3.イベント(CEventを使用。.NETで作成できるか不明) 4.メッセージウインド(.NETで作成できるか不明) 5.パイプ(名前付きパイプを使用のもの。.NETで作成できるか不明) 以上のものはアドレスをパラメータとして送れるものでしょうか? 上記1,2に関してはアドレスを送るのではなく単純なバイナリデータですが .NETを使用して作成出来ました。 が、3,4に関しては作成方法がわからず中断しております。 5に関してはまだ調べたばかりでサンプルも作成していません。 また他にもあるようでしたらお教え下さい。 お願い致します。

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

  • ベストアンサー
回答No.1

32ビットOSではアドレスも32ビットですので 単純に4バイトの情報を通知するという意味では どんな方法もよいかと。 ただ、イベントはちょっと意味が違って あれはデータを通知する仕組みではなくて 文字通りイベントを通知するものなので。。。 4.のメッセージウィンドとは Windowメッセージのことでしょうか? .NETというよりはWin32っぽいですが 相手プロセスのウィンドウハンドルか何かがわかれば SendMessageとかPostMessageでどうでしょうか。 或いは 渡そうとしているアドレスが プロセスの垣根を越えて有効なものでありたいのなら WM_COPYDATA(だったかな?) あたりのメッセージが役立つかと。 質問の意味を完全に把握できないので 推測で書いてしまいましたが参考になれば幸いです。

TOMMY29
質問者

お礼

返信が遅くなり申し訳ありません。 通信に関しての理解が浅いためか質問の仕方が わかりにくかったようで。。。 でもWM_COPYDATAが使えました。 回答とても参考になりました。 ありがとうございます。

関連するQ&A

  • VB .NETでのSocket間通信について

    すいません。Socket間通信のプログラムについて教えてもらえませんか。 System.Net.Socketsを使用してプログラムを作成するのだと思うのですが、 未熟なため困っております。 内容は以下の通りです。 ある機器がネットワークにぶら下がっております(IP Address : 192.168.1.99) その機器に対してネットワーク上のPCから次のようなコマンドを打ちます。 RQ A0,1,0 ---- 単なるパラメータなのでそのままテキストで送信 するとその機器は OK [バイナリデータ] として、バイナリデータは画像ファイルを送信してきます。 で、私がやろうとしていることはそのバイナリデータの画像ファイルをコマンド を投げたPCにファイルとして取得したい(例えば001.bmpなど)のです。 テキストとバイナリがごっちゃになっていて更にデータをダウンロードすると いうので実はパニッくっています。 少しのヒントでよいので、突破口になりそうなヒントや参考にしたらいいHPを教え てもらえると助かります。 ・・・MSDNは見ているのですが。。。理解力が乏しいので少しでもう少しわかりやすい HP等があればと思い投稿させていただきます。

  • サーバプロセスとクライアントプロセスの通信

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (1)TCPコネクション  サーバ側ポート番号【23】と、それぞれのクライアント側ポート番号【****】との間に確立する。   (2)通信処理  クライアント側のプロセスAは、サーバ側のプロセスA(子)  クライアント側のプロセスBは、サーバ側のプロセスB(子)  クライアント側のプロセスCは、サーバ側のプロセスC(子)  との間で通信を行う。 ※添付の図も参照ください。 認識に相違ないでしょうか。 サーバプロセスとクライアントプロセスの通信を行う際、プロセス間(ポート間?)の通信には、IPアドレスとポート番号を組み合わせたソケットを用いるため、サーバ側ではソケット【192.168.0.1:23】を1個作成し、クライアント側ではソケット【192.168.0.2:****】をプロセス分作成すると考えています。 このとき、クライアントプロセスAはサーバプロセスA(子)と通信を行いますが、サーバ側で作成されているソケットは1つであるため、どの子プロセスに対してデータをせばいいのか判別できないのではないかと考えています。 ※クライアントプロセス(A、B、C)はソケット(サーバ側)【192.168.0.1:23】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • C#でネットワークプログラミング

    C#でネットワークプログラムをしているものです。 本を読みながら勉強しているのですが C#だとTcpListener・TcpClientを用いれば 簡単にチャットを作れますよね。 で、他にも方法があって Socket通信と非同期なSocket通信というものが ありますが、 実際問題としてこの二つの違いというのが よくわかりません。 どっちでもいいじゃんと思えるのです。 違いをわかりやすく教えていただけると幸いです。 具体的にチャット(3人以上でできるもの) だとどれがどうとかありますでしょうか?

  • プロセス間でのメッセージキュー送信

    Linux初心者です。 あるプロセスが生成したメッセージキューへ、別のプロセスからメッセージキュー送信する場合、キューIDを指定する必要があります。 しかし、Linuxでは仮想メモリを使用しているため、共有メモリにアクセスできないはずで、異なるプロセス間でキューIDを共有する方法がわかりません。。 メッセージキューについて以下のサイトでサンプルプログラムが紹介されていますが、2つのプロセスが親子関係であるため、キューIDを共有できています。 http://linuxmag.sourceforge.jp/Japanese/March2003/article287.shtml そもそも、親子関係がないとプロセス間通信ができないのでしょうか? ご存知の方、よろしくお願いします。

  • メッセージキューのスレッド間通信 

    linuxは全くの初心者なんですが、仕事でメッセージキューでスレッド間通信をするツールを作成するよう指示を受けたのですが全くわかりません。プロセス間通信をするツールは調べて何とかなったんですが… そもそもスレッド間通信ということがわからず困っていますので、ご教授願います。 簡単ものでいいのでツールについても教えていただけたら幸いです。

  • Unix/Linux-Cを勉強したいのですが

    (C++が入っていてもいなくてもよい) ・セマフォ ・clone ・メッセージキュー ・ソケット通信 などのやさしい具体例が載っているいい本は無いでしょうか?

  • VB2005でTCP/IPソケット通信で受信した場合のIPアドレス

    VB2005の初心者です。 TCP/IPソケット通信で複数端末から受信した場合の送信元のIPアドレスを知りたいのですが、どうすれば取得できるのでしょうか。 通信部分のソースは下記です。 複数端末から受信するため、IPアドレスは指定していませんが、 受信時の実際の送信元IPアドレスが知りたいです。 Public M_Server As TcpListener Public M_Client As TcpClient 'リスナーを作成する '複数から受信するため、IPアドレスは指定しない M_Server = New TcpListener(System.Net.IPAddress.Any, M_ListenPort) 'リスナーを開始する。 M_Server.Start() M_Client = M_Server.AcceptTcpClient() ヒントになることでも良いので、 皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • 異なるプロセスですでに開かれているキューのオープンができません

    現在、Linux(Suse10.3)の環境でPOSIXのメッセージキューを用いたプロセス間通信のプログラムを作成しています。 mq_openでメッセージキューをオープンしているのですが、 異なるプロセスですでに開かれているキューのオープンができません。 最初にオープンしたキューは受信専用、異なるプロセスでオープンするキューは送信専用です。 errnoを調べましたが、 EACCES("\nキューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープンする許可を持たない。")となっています。 プロセスAの第3引数についてはmode_t S_IRWXU=0x777;としていますが、この辺りの設定方法がよくわかりません。 例) <プロセスA(プロセスBより先に実行)> msqid = mq_open(   "/sample001", O_RDONLY | O_CREAT, S_IRWXU, &mqattr); cout << "msqid:" << msqid << enld; msqid:3 <プロセスB> mqd = mq_open("/sample001", O_WRONLY); cout << "msqid:" << msqid << enld; msqid:-1 ///////////////////////////////////////////////////////////// //errnoは下記の通りです。 ///////////////////////////////////////////////////////////// EACCES(キューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープ>ンする許可を持たない。) 何か心当たりはありませんでしょうか?

  • c言語にてソケット通信

    linux環境のc言語にてソケット通信のプログラムを作成しています。 UDP通信にてヘッダを書き換える必要があるためrawソケットを使用し、複数ある ネットワークインターフェース(eth0、eth1など)を引数にして使用したいのですが、どうしたら使い分けできるので しょうか。

  • ソケット通信について

    VB.NET2005使用 PCと機器とをソケットクラスを使用してやり取りしています。 ここで、LANケーブルの切断やケーブルがコネクタから抜けたなど通信が途絶えた場合、再度接続する方法はありますか? もちろんケーブル交換、コネクタ確認を行った後です。