Vous êtes actuellement hors ligne, en attente de reconnexion à Internet.

Comment utiliser les canaux nommés pour les communications dans Visual Basic .NET ou Visual Basic 2005 interprocessus

TRADUCTION AUTOMATIQUE : Cet article technique a été traduit par un système automatique, c'est-à-dire sans aucune intervention humaine. Microsoft propose ce type d’articles en complément de ceux traduits par des traducteurs professionnels. Ces articles sont destinés principalement aux utilisateurs ne comprenant pas l'anglais en leur proposant, en complément, une version française de l’information technique fournie dans la version américaine et originale de l’article. Pour plus de détails, veuillez consulter la page http://support.microsoft.com/gp/mtdetails. Attention : Il est possible que certaines parties de l’article ne soient pas traduites par le système automatique et qu’elles soient restées rédigées en anglais. Microsoft ne garantit pas la qualité linguistique des traductions et ne peut être tenu responsable d’aucun problème, direct ou indirect, dû à une quelconque erreur de traduction du contenu ou de son utilisation par les utilisateurs.

La version anglaise de cet article est la suivante: 871044
Résumé
Cet article étape par étape explique comment utiliser les canaux nommés dans Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 pour des communications interprocessus. Cet article contient un exemple de code qui illustre la communication client/serveur en utilisant un canal nommé dans Visual Basic .NET ou Visual Basic 2005. L'article décrit la communication interprocessus en créant un serveur de canal nommé et un client de canal nommé. La communication sur le canal est effectuée de la manière suivante :
  • Créez un canal nommé.
  • Bloquez l'application serveur en utilisant la fonction ConnectNamedPipe jusqu'à ce qu'un client connecte se.
  • Vous connectez au serveur en utilisant la fonction CallNamedPipe.
  • Appelez la fonction ReadFile ou si WriteFile fonctionne pour communiquer sur le canal.
  • Appelez la fonction DisconnectNamedPipe lorsque le processus finit d'utiliser le canal.
  • Appelez la fonction CloseHandle sur les canaux nommés après avoir terminé la communication sur le canal.
INTRODUCTION
Un canal nommé est un canal unidirectionnel ou duplex pour la communication entre un serveur de canal et un ou plusieurs clients de canal. Vous pouvez l'utilisateur nommé canaux pour permettre la communication entre des processus sur le même ordinateur ou des processus sur d'autres ordinateurs sur un réseau. Le terme fait référence à un processus à lequel crée un canal nommé et le terme fait référence à un processus à lequel se connecte à une instance d'un canal nommé "a nommé le client de canal" "a nommé le serveur de canal".

Vous pouvez utiliser Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 pour créer les applications qui communiquent à tous les processus en utilisant canaux nommés. Cet article contient des exemples de code qui utilisent un canal nommé pour communiquer entre deux applications Visual Basic .NET ou Visual Basic 2005 Windows.

Au haut en arrière

Exigences

Cet article suppose que vous maîtrisez les sujets suivants :
  • Application Windows
  • Programmer Visual Basic .NET
  • Utiliser des canaux
La liste suivante indique le matériel les logiciels et l'infrastructure réseau recommandés ainsi que les Service Packs dont vous avez besoin
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
  • Microsoft .NET Framework
Au haut en arrière

Créez un serveur de canal nommé

Pour créer un serveur de canal nommé et pour communiquer puis, avec le client sur le canal, procédez comme suit :
  1. Créez un canal nommé.
  2. Appelez la fonction pour bloquer le serveur jusqu'à ce qu'un client connecte se.
  3. Appelez la fonction ou si fonctionne pour communiquer sur le canal.
  4. Appelez la fonction lorsque le processus finit d'utiliser le canal.
  5. Appelez la fonction sur les canaux nommés.
Au haut en arrière

Concevez une application Windows qui crée un serveur de canal nommé

Pour concevoir une application Windows qui crée un serveur de canal nommé en utilisant Visual Basic .NET ou Visual Basic 2005, procédez comme suit :
  1. Démarrez Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Dans le menu , pointez sur et cliquez sur .
  3. Sous , cliquez sur et puis cliquez sur , sous .

    Note dans le Visual Studio 2005, cliquez sur Visual Basic, sous Types de projets.
  4. Dans la zone , tapez et puis cliquez sur . Un formulaire qui est appelé Form1 est créé par défaut.
  5. Ajoutez trois contrôles au formulaire Form1.
  6. Dans le menu , cliquez sur .
  7. Définissez la propriété des contrôle Button aux valeurs suivantes :
    NomTexte
    Button1Créez un canal nommé
    Button2Attendez pour les connexions clientes
    Button3Déconnectez le serveur
  8. Ajoutez un contrôle au formulaire . Le contrôle Label1 est ajouté au formulaire Form1.
Au haut en arrière

Ajoutez toutes les déclarations à un module dans les applications Windows

Pour ajouter les déclarations de fonction est requis d'implémenter la communication interprocessus, les déclarations en utilisant le canal nommé, procédez comme suit :
  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur , pointez sur et puis cliquez sur .
  2. Dans la boîte de dialogue , cliquez sur .
  3. Ajoutez le code suivant au module :
    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
Au haut en arrière

Écrivez le code pour créer un serveur de canal nommé

Après avoir créé un canal nommé, attentez des connexions du client. Lorsque le client se connecte au serveur, lisez ou écrivez les données sur le canal. Exécutez les procédures pour cela :
  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur et puis cliquez sur .
  2. En mode Création du formulaire, double-cliquez sur et ajoutez puis le code suivant à la procédure :
    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. Ajoutez le code suivant avant la procédure :
    Private Const pipeName As String = "\\.\pipe\MyPipe"Private Const BUFFSIZE As Short = 10000Private Buffer(BUFFSIZE) As BytePrivate hPipe As Integer
  4. Dans Explorateur de solutions, double-cliquez sur .
  5. En mode Création Form1 du formulaire, double-cliquez sur et ajoutez puis le code suivant à la procédure :
    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. Dans le mode Création, double-cliquez sur et ajoutez puis le code suivant à la procédure :
    Button2.Visible = FalseButton3.Visible = False
  7. Dans Explorateur de solutions, double-cliquez sur .
  8. En mode Création Form1 du formulaire, double-cliquez sur et ajoutez puis le code suivant à la procédure :
    Dim res As Integer'Close the pipe handle when the client makes no requestsCloseHandle(hPipe)Label1.Text = "Disconnected the named pipe"
  9. Dans le menu , cliquez sur .
Au haut en arrière

Créez un client de canal nommé

Pour créer un client de canal nommé qui communique avec le serveur, procédez comme suit :
  1. Appelez la fonction pour créer un handle au canal nommé.
  2. Appelez la fonction ou si fonctionne pour communiquer sur le canal.
  3. Appelez la fonction sur l'handle créé dans la fonction .
Vous pouvez également utiliser une transaction de canal nommé pendant la communication client/serveur. La transaction de canal nommé combine une opération d'écriture et une opération de lecture dans une opération réseau unique. Une transaction peut être utilisée seulement sur un canal message-type recto verso. Les processus peuvent utiliser la fonction ou la fonction pour effectuer les transactions de canal nommé.

Vous dans cet exemple de code, utilisez la fonction pour vous connecter au serveur de canal nommé, pour écrire les données dans le canal et pour lire les données dans le canal, puis.

Au haut en arrière

Concevez une application Windows qui communique avec le serveur de canal nommé

Pour concevoir une application Visual Basic .NET ou Visual Basic 2005 Windows qui est utilisée pour vous connecter au serveur de canal nommé, procédez comme suit :
  1. Démarrez Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Dans le menu , pointez sur et cliquez sur .
  3. Sous , cliquez sur et puis cliquez sur , sous .

    Note dans le Visual Studio 2005, cliquez sur Visual Basic, sous Types de projets.
  4. Dans la zone , tapez et puis cliquez sur . Un formulaire qui est appelé Form1 est créé par défaut.
  5. Ajoutez un contrôle au formulaire Form1.
  6. Cliquez avec le bouton droit sur et puis cliquez sur .
  7. Définissez la propriété à .
  8. Ajoutez un contrôle au formulaire Form1. Le contrôle Label1 est ajouté au formulaire .
  9. Définissez la propriété de contrôle Label1 sur .
  10. Ajoutez deux contrôles au formulaire Form1.
Au haut en arrière

Écrivez code pour établir une connexion au serveur de canal nommé

Vous connectez au serveur de canal nommé en utilisant la fonction . Après avoir établi une connexion au serveur le lit le canal et ferme puis le canal fonction écrit dans le canal. Pour vous connecter ensuite, au serveur, pour lire ou pour écrire les données, procédez comme suit :
  1. Dans le mode Création, double-cliquez sur et ajoutez puis le code suivant à la procédure :
    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. Ajoutez le code suivant avant la procédure :
    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. Dans le menu , cliquez sur .
Au haut en arrière

Vérifiez que le code fonctionne

Pour vérifier que votre code fonctionne, procédez comme suit :
  1. Pour démarrer l'application serveur, cliquez sur dans le menu du projet MyServerApp.
  2. Sur le formulaire Form1, cliquez sur et puis cliquez sur . L'application est bloquée maintenant et attend le client à connecter se.
  3. Pour démarrer l'application cliente, cliquez sur dans le menu du projet MyClientApp.
  4. Sur le formulaire Form1, tapez , dans la zone et puis cliquez sur . Vous pouvez voir le tableau d'octets qui est reçu dans la zone .
  5. Pour déconnecter l'application cliente du serveur de type dans le zone dans l'application cliente et clique puis, sur .
  6. Fermez l'application cliente.
  7. Pour déconnecter la fin de serveur du canal nommé et pour fermer l'application serveur, puis, cliquez sur du formulaire Form1 de l'application serveur.
Au haut en arrière
Références
Pour plus d'informations reportez-vous aux sites Web MSDN (Microsoft Developer Network) aux adresses suivantesAu haut en arrière

Avertissement : cet article a été traduit automatiquement

Propriétés

ID d'article : 871044 - Dernière mise à jour : 01/11/2007 06:36:07 - Révision : 2.4

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 KB871044 KbMtfr kbmt
Commentaires