現在オフラインです。再接続するためにインターネットの接続を待っています

Visual Basic でのプロセス間の通信に名前付きパイプを使用する方法です。NET または Visual Basic 2005

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

871044
概要
この資料では、マイクロソフトの Visual Basic での名前付きパイプを使用する方法について説明します。NET または Microsoft Visual Basic 2005 のプロセス間の通信します。Visual Basic では、名前付きパイプを使用してクライアント/サーバー間の通信を示すコード サンプルについて説明します。NET または 2005 年の Visual Basic。「、名前付きパイプ サーバーと名前付きパイプ クライアントを作成することによって、プロセス間通信をについて説明します。次のように、パイプを経由した通信が行われます。
  • 名前付きパイプを作成します。
  • サーバー アプリケーションは、クライアントが接続するまでに、ConnectNamedPipe 関数を使用してブロックします。
  • サーバーには、CallNamedPipe 関数を使用して接続します。
  • ReadFile 関数またはパイプ経由で通信するために、WriteFile 関数を呼び出します。
  • パイプを使用して、プロセスを終了すると、DisconnectNamedPipe 関数を呼び出します。
  • パイプ経由の通信を完了すると、名前付きパイプを CloseHandle 関数を呼び出します。
はじめに
名前付きパイプは一方向または双方向のパイプは、パイプ サーバーと 1 つ以上のパイプ クライアント間の通信です。名前付きパイプのユーザーが同じコンピューター上のプロセス間やネットワーク経由で別のコンピューター上のプロセス間の通信を提供することができます。「パイプ サーバー名」「パイプ クライアント名前付き」名前付きパイプのインスタンスに接続するプロセスを指します、名前付きパイプを作成するプロセスを指します。

マイクロソフトの Visual Basic を使用できます。名前付きパイプを NET または Microsoft Visual Basic 2005年を使用して他のプロセスからの通信アプリケーションを作成します。ここでは、2 つの Visual Basic の間の通信に名前付きパイプを使用するコード サンプルを示します。NET または Visual Basic 2005年の Windows アプリケーション。

先頭に戻る

要件

この資料では、次のトピックに精通しているを前提としています。
  • Windows アプリケーション
  • Visual Basic。NET プログラミング
  • パイプを使用してください。
推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要な service pack を以下に示します。
  • マイクロソフトの Visual Studio。NET またはマイクロソフトの Visual Studio 2005
  • [マイクロソフト]。NET Framework
先頭に戻る

名前付きパイプ サーバーを作成します。

名前付きパイプ サーバーを作成し、クライアントには、パイプ経由で通信するには、次の手順を実行します。
  1. 名前付きパイプを作成します。
  2. 呼び出して、 ConnectNamedPipe クライアントが接続するまで、サーバーをブロックする関数です。
  3. 呼び出して、 Readfile 関数 関数または、 WriteFile パイプ経由で通信するために機能します。
  4. 呼び出して、 DisconnectNamedPipe パイプを使用して、処理の終了時の関数です。
  5. 呼び出して、 CloseHandle 名前付きパイプ上の関数です。
先頭に戻る

名前付きパイプ サーバーを作成する Windows アプリケーションを設計します。

Visual Basic を使用して、名前付きパイプ サーバーを作成する Windows アプリケーションを作成します。NET または 2005 年これらの手順を実行、します。
  1. Microsoft Visual Studio を起動します。NET またはマイクロソフトの Visual Studio 2005。
  2. で、 ファイル メニューのポイント 新しい、し プロジェクト.
  3. 下にあります。 [プロジェクトの種類をクリックして Visual Basic プロジェクト、し Windows アプリケーション 下にあります。 テンプレート.

    メモ Visual Studio 2005 年にをクリックします。 Visual Basic 下にあります。 [プロジェクトの種類.
  4. で、 名前 ボックスの種類 MyServerApp、し [OK].既定では、Form1 という名前はのフォームが作成されます。
  5. 3 つを追加します。 ボタン Form1 フォームにコントロールします。
  6. で、 ビュー メニューをクリックして [プロパティ] ウィンドウ.
  7. 設定は、 テキスト プロパティが ボタン コントロールには、次の値:
    名前テキスト
    Button1名前付きパイプを作成します。
    Button2クライアントの接続を待つ
    Button3サーバーを切断します。
  8. 追加します。 ラベル 制御するのには Form1 フォームです。Label1 ラベル コントロールを Form1 フォームに追加されます。
先頭に戻る

すべての宣言を追加するのには、Windows アプリケーション内のモジュール

名前付きパイプを使用して、プロセス間の通信を実装するために必要な関数の宣言を追加するには、次の手順を実行します。
  1. ソリューション エクスプ ローラーで右クリックします。 MyServerApp、ポイント 追加、し モジュールを追加します。.
  2. で、 MyServerApp-[新しい項目の追加します。 ダイアログ ボックス、クリックして ファイルを開く.
  3. 次のコードを追加、 Module1.vb モジュール:
    Public Const FILE_ATTRIBUTE_NORMAL As Short = &H80SPublic Const FILE_FLAG_NO_BUFFERING As Integer = &H20000000Public Const FILE_FLAG_WRITE_THROUGH As Integer = &H80000000Public Const PIPE_ACCESS_DUPLEX As Short = &H3SPublic Const PIPE_READMODE_MESSAGE As Short = &H2SPublic Const PIPE_TYPE_MESSAGE As Short = &H4SPublic Const PIPE_WAIT As Short = &H0SPublic Const INVALID_HANDLE_VALUE As Short = -1Declare Function CreateNamedPipe Lib "kernel32" Alias "CreateNamedPipeA" _(ByVal lpName As String, ByVal dwOpenMode As Integer, _ByVal dwPipeMode As Integer, ByVal nMaxInstances As Integer, _ByVal nOutBufferSize As Integer, ByVal nInBufferSize As Integer, _ByVal nDefaultTimeOut As Integer, ByVal lpSecurityAttributes As IntPtr _) As IntegerDeclare Function ConnectNamedPipe Lib "kernel32" _    (ByVal hNamedPipe As Integer, ByVal lpOverlapped As Integer) As IntegerDeclare Function DisconnectNamedPipe Lib "kernel32" _    (ByVal hNamedPipe As Integer) As IntegerDeclare Function WriteFile Lib "kernel32" _(ByVal hFile As Integer, ByRef lpBuffer() As Byte, _ByVal nNumberOfBytesToWrite As Integer, ByRef lpNumberOfBytesWritten As Integer, _ByVal lpOverlapped As Integer _) As IntegerDeclare Function ReadFile Lib "kernel32" _(ByVal hFile As Integer, ByRef lpBuffer As Integer, _ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, _ByVal lpOverlapped As Integer _) As IntegerDeclare Function FlushFileBuffers Lib "kernel32" _    (ByVal hFile As Integer) As IntegerDeclare Function CloseHandle Lib "kernel32" _    (ByVal hObject As Integer) As Integer
先頭に戻る

名前付きパイプ サーバーを作成するコードを記述します。

名前付きパイプを作成すると、クライアントからの接続を待ちます。クライアントがサーバーに接続すると、読み取りまたは、パイプを介してデータを書き込みます。これを行うには、次の手順を実行します。
  1. ソリューション エクスプ ローラーで右クリックします。 Form1、し ファイルを開く.
  2. デザイン ビューで、 Form1 フォームで、ダブルクリック 名前付きパイプを作成します。は、次のコードを追加し、 Button1_Click 手順:
    Dim openMode, pipeMode As Integer'Create the named pipeopenMode = PIPE_ACCESS_DUPLEX Or FILE_FLAG_WRITE_THROUGHpipeMode = PIPE_WAIT Or PIPE_TYPE_MESSAGE Or PIPE_READMODE_MESSAGEhPipe = CreateNamedPipe(pipeName, openMode, pipeMode, 10, 10000, 2000, 10000, IntPtr.Zero)Label1.Text = "Created the named pipe and waiting for the clients."Button1.Visible = FalseButton2.Visible = TrueButton3.Visible = True
  3. 前に、次のコードを追加、 Button1_Click 手順:
    Private Const pipeName As String = "\\.\pipe\MyPipe"Private Const BUFFSIZE As Short = 10000Private Buffer(BUFFSIZE) As BytePrivate hPipe As Integer
  4. ソリューション エクスプ ローラーでダブルクリックします。 Form1.vb.
  5. Form1 フォームのデザイン ビューでをダブルクリックします。 クライアントの接続を待つは、次のコードを追加し、 Button2_Click 手順:
    Dim byteCount, i, res, cbnCount As IntegerFor i = 0 To BUFFSIZE - 1 'Fill an array of numbers   Buffer(i) = i Mod 256Next i'Wait for a connection, block until a client connectsLabel1.Text = "Waiting for client connections"Me.Refresh()Do   res = ConnectNamedPipe(hPipe, 0)   'Read the data sent by the client over the pipe   cbnCount = 4   res = ReadFile(hPipe, byteCount, Len(byteCount), cbnCount, 0)   If byteCount > BUFFSIZE Then 'Client requested for byteCount bytes       byteCount = BUFFSIZE 'but only send up to 20000 bytes   End If   'Write the number of bytes requested by the client    res = WriteFile(hPipe, Buffer, byteCount, cbnCount, 0)   res = FlushFileBuffers(hPipe)   'Disconnect the named pipe.   res = DisconnectNamedPipe(hPipe)   'Loop until the client makes no more requests for data. Loop Until byteCount = 0Label1.Text = "Read or Write completed"Button2.Visible = False
  6. デザイン ビューでをダブルクリックします。 Form1は、次のコードを追加し、 Form1_Load 手順:
    Button2.Visible = FalseButton3.Visible = False
  7. ソリューション エクスプ ローラーでダブルクリックします。 Form1.vb.
  8. Form1 フォームのデザイン ビューでをダブルクリックします。 サーバーを切断します。は、次のコードを追加し、 Button3_Click 手順:
    Dim res As Integer'Close the pipe handle when the client makes no requestsCloseHandle(hPipe)Label1.Text = "Disconnected the named pipe"
  9. で、 ビルド メニューをクリックして ソリューションをビルドします。.
先頭に戻る

名前付きパイプ クライアントを作成します。

サーバーとの通信に名前付きパイプ クライアントを作成するには、次の手順を実行します。
  1. 呼び出して、 CreateFile 名前付きパイプへのハンドルを作成するには、[関数] をクリックします。
  2. 呼び出して、 Readfile 関数 関数または、 WriteFile パイプ経由で通信するために機能します。
  3. 呼び出して、 CloseHandle 関数で作成されたハンドルは、 CreateFile 関数です。
クライアント/サーバー間の通信は、名前付きパイプのトランザクションをことすることもできます。名前付きパイプのトランザクションが書き込み操作および読み取り操作では、1 つのネットワーク操作を組み合わせたものです。トランザクションが二重メッセージ型パイプでのみ使用できます。プロセスで使用できる、 TransactNamedPipe 関数または、 CallNamedPipe 名前付きパイプのトランザクションを実行する関数です。

このコード サンプルでは、使用して、 CallNamedPipe 名前付きパイプ サーバーに接続し、パイプにデータを書き込む、パイプからデータを読み取る機能。

先頭に戻る

名前付きパイプのサーバーと通信する Windows アプリケーションを設計します。

デザインは、Visual Basic にします。名前付きパイプ サーバーに接続するために使用する NET または Visual Basic 2005年の Windows のアプリケーション次の手順を実行します。
  1. Microsoft Visual Studio を起動します。NET またはマイクロソフトの Visual Studio 2005。
  2. で、 ファイル メニューのポイント 新しい、し プロジェクト.
  3. 下にあります。 [プロジェクトの種類をクリックして Visual Basic プロジェクト、し Windows アプリケーション 下にあります。 テンプレート.

    メモ Visual Studio 2005 年にをクリックします。 Visual Basic 下にあります。 [プロジェクトの種類.
  4. で、 名前 ボックスの種類 MyClientApp、し [OK].既定では、Form1 という名前はのフォームが作成されます。
  5. 追加します。 ボタン Form1 フォームに制御します。
  6. 右クリックします。 Button1、し プロパティ.
  7. 設定は、 テキスト プロパティ サーバーへの接続します。.
  8. 追加します。 ラベル Form1 フォームに制御します。Label1 ラベル コントロールを追加します。 Form1 フォームです。
  9. 設定は、 表示 Label1 のプロパティ ラベル 制御するのには False.
  10. 2 つを追加します。 テキスト ボックス Form1 フォームにコントロールします。
先頭に戻る

名前付きパイプ サーバーに接続するコードを記述します。

使用して、名前付きパイプのサーバーへの接続、 CallNamedPipe 関数です。サーバーに接続して、 CallNamedPipe 関数は、パイプに書き込みます、パイプから読み込んで、パイプを閉じます。サーバーへの接続、読み取りまたはデータの書き込みするには、次の手順を実行します。
  1. デザイン ビューでをダブルクリックします。 サーバーへの接続します。は、次のコードを追加し、 Button1_Click 手順:
    Dim i, res, cbRead,numBytes As IntegerDim bArray() As ByteDim temp As StringnumBytes = CInt(TextBox1.Text)If numBytes < 0 Then    MessageBox.Show("Value must be at least 0.", MsgBoxStyle.OKOnly)    Exit SubEnd IfIf numBytes = 0 Then    Label1.Visible = True    Label1.Text = "The connection to the server is disconnected."    Button1.Visible = False    TextBox1.Visible = False    TextBox2.Visible = FalseEnd IfIf numBytes > BUFFSIZE Then    numBytes = BUFFSIZEEnd IfReDim bArray(numBytes) 'Create the return buffer'Call the CallNamedPipe function to do the transactions res = CallNamedPipe(pipeName, numBytes, Len(numBytes), bArray(0), numBytes, cbRead, 30000) 'Wait up to 30 seconds for a response'Format the data received, and then display the data in the text boxIf res > 0 Then    temp = Format(bArray(0), " 000")    For i = 1 To cbRead - 1       If (i Mod 16) = 0 Then temp = temp & vbCrLf          temp = temp & " " & Format(bArray(i), "000")    Next i    TextBox2.Text = tempElseMessageBox.Show("Error number " & Err.LastDllError & _"while trying to call the CallNamedPipe function.", MsgBoxStyle.OKOnly)End If
  2. 前に、次のコードを追加、 Button1_Click 手順:
    Private Const pipeName As String = "\\.\pipe\MyPipe"Private Const BUFFSIZE As Integer = 10000Private hpipe As Integer    Public Const INVALID_HANDLE_VALUE As Short = -1Public Declare Function CallNamedPipe Lib "kernel32" Alias "CallNamedPipeA" _(ByVal lpNamedPipeName As String, _ByRef lpInBuffer As Integer, _ByVal nInBufferSize As Integer, _ByRef lpOutBuffer As Byte, _ByVal nOutBufferSize As Integer, _ByRef lpBytesRead As Integer, ByVal nTimeOut As Integer) As Integer
  3. で、 ビルド メニューをクリックして ソリューションをビルドします。.
先頭に戻る

コードの動作を確認してください。

コードの動作を確認するには、次の手順を実行します。
  1. サーバー アプリケーションを開始するには 開始 で、 デバッグ プロジェクト メニューの MyServerApp。
  2. Form1 フォームをクリックします。 名前付きパイプを作成します。、し クライアントの接続を待つ.アプリケーションがブロックされているし、クライアントが接続するまでの待機します。
  3. クライアント アプリケーションを起動するをクリックしてください。 開始 で、 デバッグ プロジェクト メニューの MyClientApp。
  4. Form1 フォームを入力します。 10 で、 TextBox1 ボックスとクリック サーバーへの接続します。.受信されるバイトの配列を参照してください、 TextBox2 ボックス。
  5. クライアント アプリケーションがサーバーから切断するには、入力します。 0 で、 TextBox1 クライアント アプリケーションでは、ボックスし、クリックしてください サーバーへの接続します。.
  6. クライアント アプリケーションを終了します。
  7. サーバー側が名前付きパイプの接続を切断してからサーバー アプリケーションを終了するをクリックしてください。 サーバーを切断します。 サーバー アプリケーションの Form1 のフォームでは。
先頭に戻る
関連情報
詳細については、次のマイクロソフト開発ネットワーク (MSDN) Web サイトを参照してください。
名前付きパイプでのトランザクション
http://msdn2.microsoft.com/en-us/library/aa365789.aspx
先頭に戻る

警告: この資料は、自動翻訳されています

プロパティ

文書番号:871044 - 最終更新日: 07/30/2011 10:23:00 - リビジョン: 2.0

  • kbhowto kbhowtomaster kbpipes kbserver kbipc kbclient kbvs2005applies kbvs2005swept kbmt KB871044 KbMtja
フィードバック