So, nun habe ich die 2 Programmteile auf unterschiedlichen Rechnern laufen.
Aber, ich bekomme keine Verbindung vom Client zum Server.
Mein Aufruf im Clientprog sieht so aus:
Private Sub PipeClientStart(ByVal AnfrageString As String)
If ps Is Nothing Then
ps = New NamedPipe.Pipe
RemoveHandler ps.PropertyChanged, AddressOf ServerAnswer
AddHandler ps.PropertyChanged, AddressOf ServerAnswer
RemoveHandler ps.PropertyChanged, AddressOf ClientTimeOut
AddHandler ps.PropertyChanged, AddressOf ClientTimeOut
End If
With ps
If String.IsNullOrEmpty(PipeServerName) Then PipeServerName = _
.ServerName Else .ServerName = PipeServerName
.PipeName = "MyPipeName"
.ClientStart(AnfrageString)
End With
End Sub und in der Klasse der Pipe:
Private _PName As String = "Testpipe"
Public Property PipeName() As String
Get
Return _PName
End Get
Set(ByVal value As String)
_PName = value
End Set
End Property
Private _ServerName As String = String.Empty
Public Property ServerName() As String
Get
If _ServerName = String.Empty Then
Using Pcs As New dlgServerName
Pcs.ShowDialog()
If Pcs.DialogResult = Windows.Forms.DialogResult.OK Then _
_ServerName = If(Pcs.PcName.Trim = String.Concat("\\", _
My.Computer.Name.Trim), ".", Pcs.PcName)
End Using
End If
Return _ServerName
End Get
Set(ByVal value As String)
If value = String.Concat("\\", My.Computer.Name.Trim) Then _
_ServerName = "." Else _ServerName = value
End Set
End Property
<System.Runtime.InteropServices.ComVisible(True)> _
Public Sub ClientStart(ByVal AnfrageString As String)
Using PipeClient As New NamedPipeClientStream(ServerName, PipeName, _
PipeDirection.InOut, PipeOptions.None, _
Security.Principal.TokenImpersonationLevel.Impersonation)
ZeileAnzeigen("Client: --> warte auf Server..." & "PipeName = " _
& String.Concat(ServerName, ",", PipeName))
PipeClient.Connect()
startTimer()
PipeOn = True
ZeileAnzeigen("Client: --> verbunden")
sw = New StreamWriter(PipeClient)
sw.AutoFlush = True
sw.WriteLine(AnfrageString)
ZeileAnzeigen("Client Anfrage: --> " & AnfrageString)
If Not PipeOn Then PipeClient.Close()
'Direkte Deserialisierung der empfangenen TC-Instanz
' Try
Dim bfc As New BinaryFormatter
Dim tc As TransferDaten = CType(bfc.Deserialize(PipeClient), _
NamedPipe.TransferDaten)
If Not tc Is Nothing Then ClientInput = tc : RaiseEvent _
PropertyChanged(Me, ClientRequest) : TimeOut.Dispose()
' Catch ex As Exception
'ZeileAnzeigen("Client Fehler: --> " & If(ex Is Nothing, "",
' ex.InnerException.ToString))
'TimeOut.Dispose()
'End Try
PipeClient.Close()
ZeileAnzeigen("Client: --> beendet")
End Using
End Sub das ZeileAnzeigen brachte mir:
Client: --> warte auf Server...PipeName = \\MICHAEL-PC,MyPipeName
Die beiden Rechner sind im gleichen Netzwerk und ich habe über den Explorer auch Zugriff auf den anderen. Habe ich bei der Angabe des Servernamens was falsch?
Danke für die Hilfe
Gruß Christian |