Jak používat pojmenované kanály pro komunikaci mezi procesy v jazyce Visual Basic.ČISTÁ nebo Visual Basic 2005

Překlady článku Překlady článku
ID článku: 871044 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento podrobný článek popisuje, jak pomocí pojmenovaných kanálů v jazyce Microsoft Visual Basic.NET nebo Microsoft Visual Basic 2005 meziprocesové komunikace. Tento článek obsahuje ukázku kódu, který demonstruje komunikace klient server pomocí pojmenovaného kanálu v jazyce Visual Basic.NET nebo Visual Basic 2005. Článek popisuje meziprocesové komunikace vytvořením pojmenovaného kanálu serveru a klienta pojmenovaného kanálu. Komunikace prostřednictvím kanálu se provádí následujícím způsobem:
  • Vytvoření pojmenovaného kanálu.
  • Blokování aplikací serveru pomocí funkce ConnectNamedPipe, dokud se klient připojí.
  • Připojení k serveru pomocí funkce CallNamedPipe.
  • Zavolejte funkci ReadFile nebo WriteFile komunikovat prostřednictvím kanálu.
  • Po dokončení procesu instalace pomocí potrubí, volání funkce DisconnectNamedPipe.
  • Po dokončení komunikaci přes kanál pro volání funkce CloseHandle na pojmenovaný kanál.

ÚVOD

Pojmenovaný kanál je jednosměrná nebo duplexního kanálu pro komunikaci mezi kanálovým serverem a klienty kanálu. Můžete uživateli pojmenované kanály pro komunikaci mezi procesy ve stejném počítači nebo mezi procesy v různých počítačích v síti. Pojem "s názvem serveru kanálu" odkazuje na proces, který vytváří pojmenovaného kanálu a termín "s názvem Klient kanálu" odkazuje na proces, který se připojuje k instanci named pipe.

Můžete použít aplikaci Microsoft Visual Basic.NET nebo Microsoft Visual Basic 2005 vytvářet aplikace, které komunikují s ostatními procesy pomocí pojmenovaných kanálů. Tento článek obsahuje ukázku kódu, který používá pojmenovaný kanál pro komunikaci mezi dvěma jazyka Visual Basic.NET nebo jazyka Visual Basic 2005 Windows aplikací.

Požadavky

Tento článek předpokládá znalost těchto témat:
  • Aplikace systému Windows
  • Visual Basic.NET programování
  • Pomocí kanálů
Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack, které potřebujete:
  • Microsoft Visual Studio.NET nebo Microsoft Visual Studio 2005
  • Společnosti Microsoft.NET Framework

Vytvořit server pojmenovaný kanál

Chcete-li vytvořit server pojmenovaný kanál a potom s klientem komunikovat kanálu, postupujte takto:
  1. Vytvoření pojmenovaného kanálu.
  2. Volání ConnectNamedPipe funkce blokování serveru, dokud připojení klienta.
  3. Volání ReadFile funkce nebo WriteFile Funkce komunikovat prostřednictvím kanálu.
  4. Volání DisconnectNamedPipe funkce po dokončení procesu instalace pomocí kanálu.
  5. Volání CloseHandle funkce na pojmenovaný kanál.

Návrh aplikace systému Windows, kterou vytvoří server pojmenovaný kanál

K návrhu aplikace systému Windows, který vytvoří server pojmenovaný kanál pomocí jazyka Visual Basic.NET nebo jazyka Visual Basic 2005, postupujte takto:
  1. Spusťte aplikaci Visual Studio.NET nebo Microsoft Visual Studio 2005.
  2. V Soubor příkaz Novýa klepněte na tlačítko Projekt.
  3. Ve skupinovém rámečku Typy projektů, klepněte na tlačítko Projekty jazyka Visual Basica klepněte na tlačítko Aplikace systému Windows ve skupinovém rámečku Šablony.

    Poznámka: V aplikaci Visual Studio 2005 klepněte na tlačítko Visual Basic ve skupinovém rámečku Typy projektů.
  4. V Název Typ pole MyServerAppa klepněte na tlačítko OK. Ve výchozím nastavení je vytvořen formulář, který je pojmenován Formulář1.
  5. Přidat tři Tlačítko Ovládací prvky na formuláři Formulář1.
  6. V Zobrazení nabídky, klepněte na tlačítko Okno Vlastnosti.
  7. Nastavit Text Vlastnost Tlačítko Ovládací prvky na následující hodnoty:
    Zmenšit tuto tabulkuRozšířit tuto tabulku
    NázevText
    Button1Pojmenovaný kanál
    Button2Čekání na připojení klienta
    Button3Odpojit server
  8. Přidat Popisek k řízení Formulář1 formulář. Popis1 Popisek ovládací prvek je přidán do formuláře Formulář1.

Přidat všechny deklarace modulu aplikace systému Windows

Chcete-li přidat deklarace funkce, které jsou nutné k implementaci meziprocesové komunikace pomocí pojmenovaného kanálu, postupujte takto:
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši MyServerApp, přejděte na příkaz Přidata klepněte na tlačítko Přidat modul.
  2. V Přidat novou položku - MyServerApp Dialogové okno, klepněte na tlačítko Otevřít.
  3. Přidejte následující kód Module1.VB modul:
    Public Const FILE_ATTRIBUTE_NORMAL As Short = &H80S
    Public Const FILE_FLAG_NO_BUFFERING As Integer = &H20000000
    Public Const FILE_FLAG_WRITE_THROUGH As Integer = &H80000000
    
    Public Const PIPE_ACCESS_DUPLEX As Short = &H3S
    Public Const PIPE_READMODE_MESSAGE As Short = &H2S
    Public Const PIPE_TYPE_MESSAGE As Short = &H4S
    Public Const PIPE_WAIT As Short = &H0S
    
    Public Const INVALID_HANDLE_VALUE As Short = -1
    
    Declare 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 Integer
    
    Declare Function ConnectNamedPipe Lib "kernel32" _
        (ByVal hNamedPipe As Integer, ByVal lpOverlapped As Integer) As Integer
    
    Declare Function DisconnectNamedPipe Lib "kernel32" _
        (ByVal hNamedPipe As Integer) As Integer
    
    Declare 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 Integer
    
    Declare 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 Integer
    
    Declare Function FlushFileBuffers Lib "kernel32" _
        (ByVal hFile As Integer) As Integer
    
    Declare Function CloseHandle Lib "kernel32" _
        (ByVal hObject As Integer) As Integer
    

Zapsat kód pro vytvoření serveru pojmenovaného kanálu

Po vytvoření pojmenovaného kanálu se čekat připojení klienta. Při připojení klienta k serveru, číst nebo zapisovat data prostřednictvím kanálu. Chcete-li to provést, postupujte takto:
  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myši Formulář1a klepněte na tlačítko Otevřít.
  2. V návrhovém zobrazení Formulář1 formuláře, poklepejte na položku Pojmenovaný kanála potom přidejte následující kód Button1_Click Postup:
    Dim openMode, pipeMode As Integer
    'Create the named pipe
    openMode = PIPE_ACCESS_DUPLEX Or FILE_FLAG_WRITE_THROUGH
    pipeMode = PIPE_WAIT Or PIPE_TYPE_MESSAGE Or PIPE_READMODE_MESSAGE
    hPipe = CreateNamedPipe(pipeName, openMode, pipeMode, 10, 10000, 2000, 10000, IntPtr.Zero)
    Label1.Text = "Created the named pipe and waiting for the clients."
    Button1.Visible = False
    Button2.Visible = True
    Button3.Visible = True
  3. Přidejte následující kód před Button1_Click Postup:
    Private Const pipeName As String = "\\.\pipe\MyPipe"
    Private Const BUFFSIZE As Short = 10000
    Private Buffer(BUFFSIZE) As Byte
    Private hPipe As Integer
  4. V aplikaci Solution Explorer poklepejte na Form1.VB.
  5. V návrhovém zobrazení formuláře formulář1 poklepejte na položku Čekání na připojení klientaa potom přidejte následující kód Button2_Click Postup:
    Dim byteCount, i, res, cbnCount As Integer
    For i = 0 To BUFFSIZE - 1 'Fill an array of numbers
       Buffer(i) = i Mod 256
    Next i
    'Wait for a connection, block until a client connects
    Label1.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 = 0
    Label1.Text = "Read or Write completed"
    Button2.Visible = False
  6. V návrhovém zobrazení poklepejte na položku Formulář1a potom přidejte následující kód Form1_Load Postup:
    Button2.Visible = False
    Button3.Visible = False
  7. V aplikaci Solution Explorer poklepejte na Form1.VB.
  8. V návrhovém zobrazení formuláře formulář1 poklepejte na položku Odpojit servera potom přidejte následující kód Button3_Click Postup:
    Dim res As Integer
    'Close the pipe handle when the client makes no requests
    CloseHandle(hPipe)
    Label1.Text = "Disconnected the named pipe"
  9. V Sestavení nabídky, klepněte na tlačítko Řešení.

Vytvoření pojmenovaného kanálu klienta

Chcete-li vytvořit pojmenovaný kanál klient, který komunikuje se serverem, postupujte takto:
  1. Volání CreateFile Funkce vytvořit popisovač pojmenovaného kanálu.
  2. Volání ReadFile funkce nebo WriteFile Funkce komunikovat prostřednictvím kanálu.
  3. Volání CloseHandle funkce na úchyt, která je vytvořena v CreateFile funkce.
Transakce pojmenovaného kanálu můžete také použít pro komunikaci klient server. Transakce pojmenovaného kanálu kombinuje operace zápisu a operace v rámci jediného operace čtení. Transakci lze použít pouze na oboustranný, typ zprávy kanálu. Procesy lze použít TransactNamedPipe funkce nebo CallNamedPipe Funkce provádět transakce pojmenovaného kanálu.

V této ukázce kódu je použít CallNamedPipe funkce připojení k serveru pojmenovaného kanálu, zapsat data do kanálu a pak číst data z kanálu.

Návrh aplikace systému Windows, který komunikuje se serverem pojmenovaný kanál

K návrhu jazyka Visual Basic.NET nebo jazyka Visual Basic 2005 Windows aplikace, která slouží k připojení na server pojmenovaný kanál, postupujte takto:
  1. Spusťte aplikaci Visual Studio.NET nebo Microsoft Visual Studio 2005.
  2. V Soubor příkaz Novýa klepněte na tlačítko Projekt.
  3. Ve skupinovém rámečku Typy projektů, klepněte na tlačítko Projekty jazyka Visual Basica klepněte na tlačítko Aplikace systému Windows ve skupinovém rámečku Šablony.

    Poznámka: V aplikaci Visual Studio 2005 klepněte na tlačítko Visual Basic ve skupinovém rámečku Typy projektů.
  4. V Název Typ pole MyClientAppa klepněte na tlačítko OK. Ve výchozím nastavení je vytvořen formulář, který je pojmenován Formulář1.
  5. Přidat Tlačítko řízení k formuláři Formulář1.
  6. Klepněte pravým tlačítkem myši Button1a klepněte na tlačítko Vlastnosti.
  7. Nastavit Text Vlastnost Připojit k serveru.
  8. Přidat Popisek řízení k formuláři Formulář1. Popis1 Popisek ovládací prvek je přidán do Formulář1 formulář.
  9. Nastavit Viditelné Vlastnost popis1 Popisek ovládacího prvku NEPRAVDA.
  10. Přidejte dvě Textové pole Ovládací prvky na formuláři Formulář1.

Kód pro připojení k serveru pojmenovaného kanálu

Připojení k serveru pojmenovaného kanálu pomocí CallNamedPipe funkce. Po připojení k serveru, CallNamedPipe funkce zapíše do kanálu, přečte z kanálu a potom zavře kanál. Chcete-li se připojit k serveru a čtení nebo zápisu dat, postupujte takto:
  1. V návrhovém zobrazení poklepejte na položku Připojit k serverua potom přidejte následující kód Button1_Click Postup:
    Dim i, res, cbRead,numBytes As Integer
    Dim bArray() As Byte
    Dim temp As String
    
    numBytes = CInt(TextBox1.Text)
    If numBytes < 0 Then
        MessageBox.Show("Value must be at least 0.", MsgBoxStyle.OKOnly)
        Exit Sub
    End If
    If numBytes = 0 Then
        Label1.Visible = True
        Label1.Text = "The connection to the server is disconnected."
        Button1.Visible = False
        TextBox1.Visible = False
        TextBox2.Visible = False
    End If
    If numBytes > BUFFSIZE Then
        numBytes = BUFFSIZE
    End If
    
    ReDim 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 box
    If 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 = temp
    Else
    MessageBox.Show("Error number " & Err.LastDllError & _
    "while trying to call the CallNamedPipe function.", MsgBoxStyle.OKOnly)
    End If
  2. Přidejte následující kód před Button1_Click Postup:
    Private Const pipeName As String = "\\.\pipe\MyPipe"
    Private Const BUFFSIZE As Integer = 10000
    Private hpipe As Integer
        
    Public Const INVALID_HANDLE_VALUE As Short = -1
    Public 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. V Sestavení nabídky, klepněte na tlačítko Řešení.

Ověřte, zda kód funguje

Chcete-li ověřit, zda kód funguje, postupujte takto:
  1. Chcete-li spustit aplikační server, klepněte na tlačítko Spustit v Ladění Nabídka projektu MyServerApp.
  2. Ve formuláři formulář1 klepněte na tlačítko Pojmenovaný kanála klepněte na tlačítko Čekání na připojení klienta. Aplikace je nyní blokována a čeká na připojení klienta.
  3. Pokud chcete spustit klientskou aplikaci, klepněte na tlačítko Spustit v Ladění Nabídka projektu MyClientApp.
  4. Ve formuláři formulář1 zadejte následující příkaz: 10 v Textovepole1 pole a pak klepněte na tlačítko Připojit k serveru. Uvidíte bajtové pole přijatých TextBox2 pole.
  5. Klientská aplikace pro odpojení od serveru, zadejte následující příkaz: 0 v Textovepole1 v klientské aplikaci a klepněte na tlačítko Připojit k serveru.
  6. Ukončete aplikaci klienta.
  7. Chcete-li odpojit serverový konec named pipe a potom ukončete serverovou aplikaci, klepněte na tlačítko Odpojit server ve formuláři formulář1 serverové aplikace.

Odkazy

Další informace naleznete na následujících webech společnosti Microsoft Developer Network (MSDN):
Pojmenované kanály
http://msdn2.microsoft.com/en-us/library/aa365590.aspx
Transakce na pojmenované kanály
http://msdn2.microsoft.com/en-us/library/aa365789.aspx
Funkce kanálu
http://msdn2.microsoft.com/en-us/library/aa365781.aspx

Vlastnosti

ID článku: 871044 - Poslední aktualizace: 22. května 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Klíčová slova: 
kbvs2005swept kbvs2005applies kbserver kbpipes kbipc kbclient kbhowtomaster kbhowto kbmt KB871044 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:871044

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com