Teď jste offline a čekáte, až se znova připojí internet.

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

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
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í.

zpět na začátek

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
zpět na začátek

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.
zpět na začátek

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:
    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.
zpět na začátek

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 = &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
zpět na začátek

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 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. Přidejte následující kód před Button1_Click Postup:
    Private Const pipeName As String = "\\.\pipe\MyPipe"Private Const BUFFSIZE As Short = 10000Private Buffer(BUFFSIZE) As BytePrivate 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 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. V návrhovém zobrazení poklepejte na položku Formulář1a potom přidejte následující kód Form1_Load Postup:
    Button2.Visible = FalseButton3.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 requestsCloseHandle(hPipe)Label1.Text = "Disconnected the named pipe"
  9. V Sestavení nabídky, klepněte na tlačítko Řešení.
zpět na začátek

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.

zpět na začátek

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.
zpět na začátek

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 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. Přidejte následující kód před Button1_Click Postup:
    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. V Sestavení nabídky, klepněte na tlačítko Řešení.
zpět na začátek

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.
zpět na začátek
Odkazy
Další informace naleznete na následujících webech společnosti Microsoft Developer Network (MSDN):zpět na začátek

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 871044 - Poslední kontrola: 05/22/2011 12:34:00 - Revize: 4.0

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbvs2005swept kbvs2005applies kbserver kbpipes kbipc kbclient kbhowtomaster kbhowto kbmt KB871044 KbMtcs
Váš názor
pt" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" ="col-sm-6 col-xs-24 ng-scope"> Paraguay - Español
Venezuela - Español
1.microsoft.com/c.gif?DI=4050&did=1&t=">&did=1&t=">pt type="text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" l) + "//c.microsoft.com/ms.js'><\/script>"); &t=">