Visual Basic 2005 veya Visual Basic. NET'te işlemler arası iletişim için adlandırılmış yöneltme nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 871044 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede adlandırılmış yöneltmeler Microsoft Visual Basic 2005 veya Microsoft Visual Basic. NET'te işlemler arası iletişim için nasıl kullanılacağı anlatılır. Bu makalede, Visual Basic 2005 veya Visual Basic. NET'te bir adlandırılmış yöneltme kullanarak, istemci/sunucu iletişimini gösteren bir kod örneğini içerir. Bu makalede, bir adlandırılmış yöneltme sunucusu ve bir adlandırılmış yöneltme istemcisi oluşturarak, ara işlem iletişimi anlatılmaktadır. Kanal üzerinden iletişim aşağıdaki şekilde gerçekleştirilir:
  • Oluşturma adlandırılmış bir kanal.
  • Kadar bir istemci bağlandıktan ConnectNamedPipe işlevini kullanarak sunucu uygulamasını engelleyecek.
  • Bağlanma, sunucu kullanarak CallNamedPipe işlevi.
  • ReadFile işlevini veya üzerinden iletişim kurmak için WriteFile işlevini çağırın. kanal.
  • Tamamlandığında işlemi kullanarak DisconnectNamedPipe işlevini çağırın. yöneltme.
  • Sonra tamamlandı üzerinden iletişimde adlandırılmış yöneltme üzerinde CloseHandle işlevini çağırın. yöneltme.

Giriş

Adlandırılmış yöneltme, bir yöneltme sunucusu ve bir veya daha fazla yöneltme istemcisi arasındaki iletişim için tek yönlü veya çift yönlü bir kanal ' dir. Adlandırılmış Yöneltmeler kullanıcı, aynı bilgisayardaki işlemler arasında veya bir ağ üzerinden farklı bilgisayarlardaki işlemler arasındaki iletişimi sağlamak için kullanabilirsiniz. "Yöneltme sunucusu adlı" bir işlem bir adlandırılmış yöneltme oluşturur ve "kanal istemci adlı" adlandırılmış yöneltme örneğine bağlayan bir işlem başvurduğu terimi başvurduğu bir terim.

Diğer işlemler için adlandırılmış yöneltme kullanarak iletişim kuran uygulamaları oluşturmak için Microsoft Visual Basic .NET'i veya Microsoft Visual Basic 2005 kullanabilirsiniz. Bu makalede, iki Visual Basic .NET veya Visual Basic 2005 Windows uygulamalar arasında iletişim kurmak için adlandırılmış yöneltme kullanan örnek bir kod içerir.

Gereksinimler

Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Windows uygulamaları
  • Visual Basic .NET programlama
  • Kanalları kullanarak
Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Visual Studio .NET veya Microsoft Visual Studio 2005
  • Microsoft .NET framework

Bir adlandırılmış yöneltme sunucusu oluşturma

Bir adlandırılmış yöneltme sunucusu oluşturun ve sonra istemciyle kanal iletişim kurmak için aşağıdaki adımları izleyin:
  1. Adlandırılmış Yöneltme oluşturur.
  2. Sunucu, istemcinin bağlandığı kadar engellemek için ConnectNamedPipe işlevini çağırın.
  3. ReadFile işlevini veya kanal iletişim kurmak için WriteFile işlevini çağırın.
  4. Kanal kullanma, işlem sona erdiğinde DisconnectNamedPipe işlevini çağırın.
  5. CloseHandle işlevi, adlandırılmış yöneltme arayın.

Bir adlandırılmış yöneltme sunucusu bir Windows uygulaması tasarlama

Visual Basic .NET veya Visual Basic 2005 kullanarak bir adlandırılmış yöneltme sunucusu oluşturan bir Windows uygulaması tasarlamak için aşağıdaki adımları izleyin:
  1. Microsoft Visual Studio 2005 ya da Microsoft Visual Studio. NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Altında Project Types, Visual Basic Projects ' ı tıklatın ve şablonları altında Windows uygulama ' yı tıklatın.

    NotVisual Basic, Visual Studio 2005'te Project Types altında tıklatın.
  4. Adı kutusuna, MyServerApp yazın ve Tamam ' ı tıklatın. Varsayılan olarak, Form1 adlı bir form oluşturulur.
  5. Üç Düğme denetimi Form1 forma ekleyin.
  6. Görünüm) menüsünde, Özellikler penceresini tıklatın.
  7. Düğme denetimlerin metin özelliği için aşağıdaki değerleri ayarlayın:
    Bu tabloyu kapaBu tabloyu aç
    AdıMetin
    Button1Adlandırılmış Yöneltme oluşturur.
    BUTTON2Istemci bağlantıları için bekleyin.
    Button3Sunucu bağlantısını kes
  8. Bir Etiket denetimi Form1 forma ekleyin. Label1 Etiket denetimi forma Form1 eklenir.

Tüm bildirimleri <a0>Windows</a0> uygulamasındaki bir modüle ekleyin

Adlandırılmış yöneltme kullanarak bir işlemler arası iletişim uygulamak için gerekli olan işlev bildirimleri eklemek için aşağıdaki adımları izleyin:
  1. Solution Explorer'da (Çözüm Gezgini), MyServerApp sağ tıklatın, sonra da Ekle işaret ve Modül Ekle</a1>'ı tıklatın.
  2. Add New ıtem - MyServerApp iletişim kutusunda ' ı tıklatın.
  3. Add the following code to the Module1.vb module:
    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
    

Bir adlandırılmış yöneltme sunucusu oluşturmak için kod yazma

Adlandırılmış Yöneltme oluşturduktan sonra istemciden gelen bağlantılar için bekleyin. Istemci, sunucuya bağlandığında, okuma ya da kanal veri yazma. Bunu yapmak için şu adımları izleyin:
  1. Solution Explorer'da (Çözüm Gezgini), Form1 ' ı sağ tıklatın ve sonra da ' ı tıklatın.
  2. Tasarım görünümünde <a0>Form1</a0> formunun <a1>Oluştur</a1> bir adlandırılmış yöneltme'ı çift tıklatın ve sonra da Button1_Click yordamına aşağıdaki kodu ekleyin:
    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. Önce Button1_Click yordamına aşağıdaki kodu ekleyin:
    Private Const pipeName As String = "\\.\pipe\MyPipe"
    Private Const BUFFSIZE As Short = 10000
    Private Buffer(BUFFSIZE) As Byte
    Private hPipe As Integer
  4. Solution Explorer'da Form1.vb çift tıklatın.
  5. In Design view of the Form1 form, double-click Wait for the client connections, and then add the following code to the Button2_Click procedure:
    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. Tasarım görünümünde Form1 ' ı çift tıklatın ve sonra da Form1_Load yordamına aşağıdaki kodu ekleyin:
    Button2.Visible = False
    Button3.Visible = False
  7. Solution Explorer'da Form1.vb çift tıklatın.
  8. Tasarım görünümünde <a0>Form1</a0> formunun, sunucu bağlantıyı kes ' i çift tıklatın ve sonra da Button3_Click yordamına aşağıdaki kodu ekleyin:
    Dim res As Integer
    'Close the pipe handle when the client makes no requests
    CloseHandle(hPipe)
    Label1.Text = "Disconnected the named pipe"
  9. Yapı) menüsünde, Build Solution ' ı tıklatın.

Bir adlandırılmış yöneltme istemcisi oluştur

Sunucuyla iletişim kuran bir adlandırılmış yöneltme istemci oluşturmak için aşağıdaki adımları izleyin:
  1. Adlandırılmış kanal için bir tanıtıcı oluşturmak üzere CreateFile işlevini çağırın.
  2. ReadFile işlevini veya kanal iletişim kurmak için WriteFile işlevini çağırın.
  3. CreateFile işlevinde oluşturulan tutamacı CloseHandle işlevini çağırın.
Bir adlandırılmış kanal işlemi, istemci/sunucu iletişim için de kullanabilirsiniz. Adlandırılmış kanal işlemi, yazma işlemi ve tek bir ağ işleminde bir okuma işlemi birleştirir. Bir hareketi yalnızca bir çift yönlü, ileti türü Yöneltme üzerinde kullanılabilir. Işlemler, TransactNamedPipe işlevi veya CallNamedPipe işlevi, adlandırılmış yöneltme işlemleri gerçekleştirmek için kullanabilirsiniz.

Bu kod örneğinde, adlandırılmış yöneltme sunucusuna, kanal için verileri yazın ve sonra da verileri kanaldan okuma CallNamedPipe işlevini kullanın.

Adlandırılmış yöneltme sunucusu ile iletişim kuran bir Windows uygulaması tasarlama

Adlandırılmış Yöneltme sunucusuna bağlanmak için kullanılan bir Visual Basic .NET veya Visual Basic 2005 Windows uygulaması tasarlamak için aşağıdaki adımları izleyin:
  1. Microsoft Visual Studio 2005 ya da Microsoft Visual Studio. NET'i başlatın.
  2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
  3. Altında Project Types, Visual Basic Projects ' ı tıklatın ve şablonları altında Windows uygulama ' yı tıklatın.

    NotVisual Basic, Visual Studio 2005'te Project Types altında tıklatın.
  4. Adı kutusuna, MyClientApp yazın ve Tamam ' ı tıklatın. Varsayılan olarak, Form1 adlı bir form oluşturulur.
  5. Bir Düğme denetimi Form1 forma ekleyin.
  6. Button1 ' ı sağ tıklatın ve sonra da Properties ' i tıklatın.
  7. Metin özelliği, sunucu bağlanma ayarlayın.
  8. Bir Etiket denetimi Form1 forma ekleyin. Label1 Etiket denetimi forma Form1 eklenir.
  9. Label1 Etiket denetiminin Visible özelliğini false olarak ayarlayın.
  10. Iki TextBox Form1 forma ekleyin.

Adlandırılmış Yöneltme sunucusuna bağlanmak için bir kod yazın.

CallNamedPipe işlevini kullanarak adlandırılmış yöneltme sunucusuna bağlanın. Sunucuya bağlanıyor sonra CallNamedPipe işlevi, kanala yazma kanaldan okur ve sonra kanal kapatır. Sunucuya bağlanmak ve okunamıyor veya verileri yazmak için aşağıdaki adımları izleyin:
  1. In Design view, double-click Connect to the server, and then add the following code to the Button1_Click procedure:
    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. Önce Button1_Click yordamına aşağıdaki kodu ekleyin:
    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. Yapı) menüsünde, Build Solution ' ı tıklatın.

Kodun çalışıp çalışmadığını doğrulayın

Kodunuzu çalıştığını doğrulamak için <a0></a0>, aşağıdaki adımları izleyin:
  1. Sunucu uygulamasını başlatmak için <a0></a0>, MyServerApp proje Hata Ayıkla menüsünde Başlat ' ı tıklatın.
  2. Form1 formunda, <a1>Oluştur</a1> bir adlandırılmış yöneltme'u tıklatın ve sonra da <a2>Aranmayı Bekle istemci bağlantıları</a2>'ı tıklatın. Uygulama şimdi engellenir ve istemcinin bağlanmak için bekler.
  3. Istemci uygulamasını başlatmak için <a0></a0>, MyClientApp proje Hata Ayıkla menüsünde Başlat ' ı tıklatın.
  4. Form1 formdaki Metinkutusu1 kutusuna 10 ve sunucuya bağlan ' ı tıklatın. TextBox2 kutusunda alınan bayt dizisi görebilirsiniz.
  5. Istemci uygulaması sunucudan bağlantıyı kesmek için <a0></a0>, türü 0Metinkutusu1, istemci uygulamasında kutusunda ve sunucuya bağlan ' ı tıklatın.
  6. Istemci uygulamasını kapatın.
  7. Adlandırılmış yöneltme sunucusu sonuna sökün ve sunucu uygulaması'ı kapatmak için <a0>sunucu</a0> uygulamasının <a1>Form1</a1> formundaki <a1>Kes</a1> sunucu Ek Yardım düğmesini tıklatın.

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitelerini ziyaret edin:
Adlandırılmış Yöneltme
http://msdn2.microsoft.com/en-us/library/aa365590.aspx
Adlandırılmış Yöneltmeler hareketleri
http://msdn2.microsoft.com/en-us/library/aa365789.aspx
Kanal işlevleri
http://msdn2.microsoft.com/en-us/library/aa365781.aspx

Özellikler

Makale numarası: 871044 - Last Review: 11 Ocak 2007 Perşembe - Gözden geçirme: 2.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbserver kbpipes kbipc kbclient kbhowtomaster kbhowto KB871044 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:871044

Geri Bildirim Ver

 

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