Πώς να χρησιμοποιούν επώνυμες διοχετεύσεις για επικοινωνία ενδοδιαδικασιακές στη Visual Basic .NET ή Visual Basic 2005

Σύνοψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο χρήσης σε Microsoft Visual Basic .NET ή Microsoft Visual Basic 2005 επώνυμες διοχετεύσεις για επικοινωνία ενδοδιαδικασιακές. Αυτό το άρθρο περιλαμβάνει ένα δείγμα κώδικα που παρουσιάζει επικοινωνία υπολογιστή-πελάτη/διακομιστή, χρησιμοποιώντας μια επώνυμη διοχέτευση στο Visual Basic .NET ή Visual Basic του 2005. Αυτό το άρθρο περιγράφει το μηχανισμός σύνδεσης επικοινωνίας με τη δημιουργία ενός διακομιστή επώνυμης διοχέτευσης και ενός υπολογιστή-πελάτη επώνυμης διοχέτευσης. Η επικοινωνία μέσω της διοχέτευσης πραγματοποιείται με τον ακόλουθο τρόπο:
  • Δημιουργήστε μια επώνυμη διοχέτευση.
  • Αποκλείει την εφαρμογή διακομιστή, χρησιμοποιώντας τη συνάρτηση ConnectNamedPipe μέχρι να συνδέει έναν υπολογιστή-πελάτη.
  • Σύνδεση με το διακομιστή, χρησιμοποιώντας τη συνάρτηση CallNamedPipe.
  • Η κλήση της συνάρτησης τη συνάρτηση ReadFile ή τη συνάρτηση WriteFile για να επικοινωνήσει μέσω της διοχέτευσης.
  • Κλήση της συνάρτησης DisconnectNamedPipe, όταν ολοκληρωθεί η διαδικασία, χρησιμοποιείτε τη διοχέτευση.
  • Κλήση της συνάρτησης CloseHandle την επώνυμη διοχέτευση, μετά την ολοκλήρωση της επικοινωνίας μέσω της διοχέτευσης.

ΕΙΣΑΓΩΓΗ

Μια επώνυμη διοχέτευση είναι μια μονόδρομη ή αμφίδρομη διοχέτευση για επικοινωνία μεταξύ ενός διακομιστή διοχέτευσης και ενός ή περισσότερων υπολογιστών-πελατών διοχέτευσης. Μπορείτε να χρήστη επώνυμες διοχετεύσεις για να παρέχουν επικοινωνία μεταξύ διεργασιών στον ίδιο υπολογιστή ή μεταξύ διεργασιών σε διαφορετικούς υπολογιστές σε ένα δίκτυο. Ο όρος "με το όνομα διακομιστή διοχέτευσης" αναφέρεται σε μια διαδικασία που δημιουργεί μια επώνυμη διοχέτευση, και ο όρος "με το όνομα πελάτη διοχέτευση" αναφέρεται σε μια διαδικασία που συνδέεται με μια παρουσία επώνυμης διοχέτευσης.


Μπορείτε να χρησιμοποιήσετε το Microsoft Visual Basic .NET ή Microsoft Visual Basic 2005 για να δημιουργήσετε εφαρμογές που επικοινωνούν σε άλλες διεργασίες χρησιμοποιώντας επώνυμες διοχετεύσεις. Αυτό το άρθρο περιέχει ένα δείγμα κώδικα που χρησιμοποιεί μια επώνυμη διοχέτευση για επικοινωνία μεταξύ των δύο εφαρμογών Visual Basic .NET ή Visual Basic 2005 Windows.

Επιστροφή στην κορυφή

Απαιτήσεις

Αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τα ακόλουθα θέματα:
  • Εφαρμογές των Windows
  • Προγραμματισμού Visual Basic .NET
  • Χρήση διοχετεύσεων
Η ακόλουθη λίστα περιγράφει το υλικού που συνιστώνται, λογισμικό, υποδομή δικτύου και τα service pack που χρειάζεστε:
  • Microsoft Visual Studio .NET ή Microsoft Visual Studio 2005
  • Microsoft .NET Framework
Επιστροφή στην κορυφή

Δημιουργήστε ένα διακομιστή επώνυμης διοχέτευσης

Για να δημιουργήσετε ένα διακομιστή επώνυμης διοχέτευσης και στη συνέχεια επικοινωνεί με τον υπολογιστή-πελάτη μέσω της διοχέτευσης, ακολουθήστε τα εξής βήματα:
  1. Δημιουργήστε μια επώνυμη διοχέτευση.
  2. Για να καλέσετε τη συνάρτηση ConnectNamedPipe για να αποκλείσετε το διακομιστή μέχρι να συνδέει έναν υπολογιστή-πελάτη.
  3. Η κλήση της συνάρτησης τη συνάρτηση ReadFile ή τη συνάρτηση WriteFile για να επικοινωνήσει μέσω της διοχέτευσης.
  4. Κλήση της συνάρτησης DisconnectNamedPipe , όταν ολοκληρωθεί η διαδικασία, χρησιμοποιείτε τη διοχέτευση.
  5. Κλήση της συνάρτησης CloseHandle την επώνυμη διοχέτευση.
Επιστροφή στην κορυφή

Σχεδιάστε μια εφαρμογή των Windows που δημιουργεί ένα διακομιστή επώνυμης διοχέτευσης

Για να σχεδιάσετε μια εφαρμογή των Windows που δημιουργεί ένα διακομιστή επώνυμης διοχέτευσης χρησιμοποιώντας τη Visual Basic .NET ή Visual Basic 2005, ακολουθήστε τα εξής βήματα:
  1. Ξεκινήστε το Microsoft Visual Studio .NET ή Microsoft Visual Studio 2005.
  2. Στο μενού αρχείο , επιλέξτε Δημιουργίακαι, στη συνέχεια, κάντε κλικ στο έργο.
  3. Στην περιοχή Τύπους έργων, κάντε κλικ στο κουμπί Έργα της Visual Basicκαι, στη συνέχεια, κάντε κλικ στο κουμπί Εφαρμογή των Windows στην περιοχή πρότυπα.

    Σημείωση Στο Visual Studio 2005, κάντε κλικ στο κουμπί Visual Basic στην περιοχή Τύπους έργων.
  4. Στο πλαίσιο όνομα , πληκτρολογήστε MyServerAppκαι, στη συνέχεια, κάντε κλικ στο κουμπί OK. Από προεπιλογή, δημιουργείται μια φόρμα που ονομάζεται Form1.
  5. Προσθέστε τρία στοιχεία ελέγχου κουμπί στη φόρμα 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 = &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

Επιστροφή στην κορυφή

Σύνταξη κώδικα για να δημιουργήσετε ένα διακομιστή επώνυμης διοχέτευσης

Αφού δημιουργήσετε μια επώνυμη διοχέτευση, περιμένετε για τις συνδέσεις από τον υπολογιστή-πελάτη. Όταν ο υπολογιστής-πελάτης συνδέεται στο διακομιστή, ανάγνωσης ή εγγραφής δεδομένων μέσω της διοχέτευσης. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:
  1. Στην Εξερεύνηση λύσεων, κάντε δεξιό κλικ Form1και, στη συνέχεια, κάντε κλικ στο κουμπί Άνοιγμα.
  2. Σε προβολή σχεδίασης της φόρμας Form1 , κάντε διπλό κλικ στο Δημιουργία μια επώνυμη διοχέτευση, και στη συνέχεια προσθέστε τον ακόλουθο κώδικα στη διαδικασία Button1_Click :
    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. Προσθέστε τον ακόλουθο κώδικα πριν από την Button1_Click διαδικασία:
    Private Const pipeName As String = "\\.\pipe\MyPipe"Private Const BUFFSIZE As Short = 10000
    Private Buffer(BUFFSIZE) As Byte
    Private 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 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. Σε προβολή σχεδίασης, κάντε διπλό κλικ στο 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 requests
    CloseHandle(hPipe)
    Label1.Text = "Disconnected the named pipe"
  9. Από το μενού Δημιουργία , κάντε κλικ στο κουμπί Δημιουργία λύσης.
Επιστροφή στην κορυφή

Δημιουργήστε ένα πρόγραμμα-πελάτης επώνυμη διοχέτευση

Για να δημιουργήσετε έναν υπολογιστή-πελάτη επώνυμης διοχέτευσης που επικοινωνεί με το διακομιστή, ακολουθήστε τα εξής βήματα:
  1. Καλέστε το CreateFile συνάρτηση για να δημιουργήσετε ένα δείκτη χειρισμού επώνυμης διοχέτευσης.
  2. Η κλήση της συνάρτησης τη συνάρτηση ReadFile ή τη συνάρτηση WriteFile για να επικοινωνήσει μέσω της διοχέτευσης.
  3. Κλήση της συνάρτησης CloseHandle στο δείκτη χειρισμού που δημιουργείται με τη συνάρτηση CreateFile .
Μπορείτε επίσης να χρησιμοποιήσετε μια συναλλαγή επώνυμη διοχέτευση για επικοινωνία υπολογιστή-πελάτη/διακομιστή. Η συναλλαγή επώνυμη διοχέτευση συνδυάζει μια λειτουργία εγγραφής και μια λειτουργία ανάγνωσης σε λειτουργία μόνο δίκτυο. Μια συναλλαγή μπορεί να χρησιμοποιηθεί μόνο σε μια διοχέτευση διπλής όψης, τύπος μηνύματος. Διεργασίες να χρησιμοποιήσετε τη λειτουργία " TransactNamedPipe " ή τη συνάρτηση CallNamedPipe για την εκτέλεση των συναλλαγών επώνυμης διοχέτευσης.


Σε αυτό το δείγμα κώδικα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση CallNamedPipe για να συνδεθείτε στο διακομιστή επώνυμης διοχέτευσης, εγγραφή των δεδομένων στη διοχέτευση και, στη συνέχεια, η ανάγνωση των δεδομένων από τη διοχέτευση.

Επιστροφή στην κορυφή

Σχεδιάστε μια εφαρμογή των Windows που επικοινωνεί με το διακομιστή επώνυμης διοχέτευσης

Για να σχεδιάσετε μια Visual Basic .NET ή Visual Basic 2005 Windows εφαρμογή που χρησιμοποιείται για τη σύνδεση στο διακομιστή επώνυμης διοχέτευσης, ακολουθήστε τα εξής βήματα:
  1. Ξεκινήστε το Microsoft Visual Studio .NET ή Microsoft 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. Ορίστε την ιδιότητα Visible Label1 ετικέτα στοιχείου ελέγχου στην τιμή False.
  10. Προσθέστε δύο στοιχεία ελέγχου πλαισίου κειμένου στη φόρμα Form1.
Επιστροφή στην κορυφή

Σύνταξη κώδικα για να συνδεθείτε στο διακομιστή επώνυμης διοχέτευσης

Συνδεθείτε στο διακομιστή επώνυμης διοχέτευσης, χρησιμοποιώντας τη συνάρτηση CallNamedPipe . Μετά τη σύνδεση με το διακομιστή, το CallNamedPipe συνάρτηση εγγράφει στη διοχέτευση, διαβάζει από το σωλήνα και, στη συνέχεια, κλείνει τη διοχέτευση. Για να συνδεθείτε με το διακομιστή, και στη συνέχεια ανάγνωσης ή εγγραφής δεδομένων, ακολουθήστε τα εξής βήματα:
  1. Σε προβολή σχεδίασης, κάντε διπλό κλικ στην σύνδεση με το διακομιστήκαι, στη συνέχεια, προσθέστε τον ακόλουθο κώδικα στη διαδικασία Button1_Click :
    Dim i, res, cbRead,numBytes As IntegerDim 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. Προσθέστε τον ακόλουθο κώδικα πριν από την Button1_Click διαδικασία:
    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. Από το μενού Δημιουργία , κάντε κλικ στο κουμπί Δημιουργία λύσης.
Επιστροφή στην κορυφή

Βεβαιωθείτε ότι λειτουργεί ο κώδικας

Για να βεβαιωθείτε ότι λειτουργεί ο κώδικάς σας, ακολουθήστε τα εξής βήματα:
  1. Για να ξεκινήσετε την εφαρμογή διακομιστή, κάντε κλικ στο κουμπί Έναρξη από το μενού Εντοπισμός σφαλμάτων από το έργο MyServerApp.
  2. Στη φόρμα Form1, κάντε κλικ στην επιλογή Δημιουργία επώνυμης διοχέτευσηςκαι στη συνέχεια κάντε κλικ στο κουμπί αναμονής για τις συνδέσεις υπολογιστή-πελάτη. Η εφαρμογή είναι αποκλεισμένη και περιμένει το πρόγραμμα-πελάτη για να συνδεθείτε.
  3. Για να ξεκινήσετε την εφαρμογή-πελάτη, κάντε κλικ στο κουμπί Έναρξη από το μενού Εντοπισμός σφαλμάτων από το έργο MyClientApp.
  4. Στη φόρμα Form1, πληκτρολογήστε 10 στο TextBox1 πλαίσιο και, στη συνέχεια, κάντε κλικ στην επιλογή σύνδεση με το διακομιστή. Μπορείτε να δείτε τον πίνακα byte που λαμβάνονται στο πλαίσιο TextBox2 .
  5. Για να αποσυνδέσετε την εφαρμογή-πελάτη από το διακομιστή, πληκτρολογήστε 0 με το TextBox1 πλαίσιο στην εφαρμογή υπολογιστή-πελάτη και, στη συνέχεια, κάντε κλικ στην επιλογή σύνδεση με το διακομιστή.
  6. Κλείστε την εφαρμογή προγράμματος-πελάτη.
  7. Για να αποσυνδέσετε τέλος διακομιστή επώνυμης διοχέτευσης και, στη συνέχεια, κλείστε την εφαρμογή διακομιστή, κάντε κλικ στο κουμπί Αποσύνδεση του διακομιστή στη φόρμα Form1 της εφαρμογής διακομιστή.
Επιστροφή στην κορυφή

Αναφορές

Για περισσότερες πληροφορίες, επισκεφθείτε τις ακόλουθες τοποθεσίες του Microsoft Developer Network (MSDN) στο Web:
Επώνυμες διοχετεύσεις
http://msdn2.microsoft.com/en-us/library/aa365590.aspx
Συναλλαγές σε επώνυμες διοχετεύσεις
http://msdn2.microsoft.com/en-us/library/aa365789.aspx
Συναρτήσεις διοχέτευσης
http://msdn2.microsoft.com/en-us/library/aa365781.aspx
Επιστροφή στην κορυφή
Ιδιότητες

Αναγνωριστικό άρθρου: 871044 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια