Ich habe mal ein paar Beispiele aus dem Forum ausprobiert, und dachte auch ich hätte es verstanden, aber dem scheint nicht so, denn es funktioniert einfach nicht.
Und zwar bin ich an folgender Stelle. Der Client wählt sich beim Server ein, und der Server soll seine Daten aus einem bestimmten Verzeichnis zum Client schicken.
Dies ist der Clientcode:
client = New TcpClient
'verbinden mit server (localhost kann mit einer gültigen ip ersetzt
' werden
client.Connect(SetIPAdress, setPort)
'networkstream binden
Stream = client.GetStream()
StartGetData() Dim inDateien As Integer = 0
Writer = New BinaryWriter(Stream)
Reader = New BinaryReader(Stream)
Writer.Write(SendFiles)
' Anzahl Dateien die auf dem Server liegen
Dim counterIn As Integer = Reader.ReadInt32()
status.Text = "Online"
Anzeigen.AnzeigePanel("Empfange Daten", counterIn)
Do
Try
' Dateiname
fnIn = Reader.ReadString()
' Wenn Dateiname = All Send dann übertragung beendet
If fnIn = AllSend Then
StartGetData = True
Exit Do
End If
iIn = Reader.ReadInt32()
bIn = Reader.ReadBytes(iIn)
fsIn = New FileStream(setSafePath & fnIn, FileMode.Create, _
FileAccess.Write, FileShare.None)
fsIn.Write(bIn, 0, iIn)
fsIn.Close()
inDateien += 1
Anzeigen.UpdateAnzeigepanel(inDateien)
StartGetData = False
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Loop While (client.Connected) Dies ist der Servercode:
Listener = New TcpListener(Net.IPAddress.Any, setPort)
Listener.Start()
Anzeigen.AddToLog("Test")
While True
status.Text = "Offline (Warte auf Anruf)"
Connection = Listener.AcceptSocket()
SocketStream = New NetworkStream(Connection)
Writer = New BinaryWriter(SocketStream)
Reader = New BinaryReader(SocketStream)
status.Text = "Online"
Writer.Write(ConnectOK) Case SendFiles
' Alle Dateien aus Transfer senden
Dim di As New DirectoryInfo(setTransPath)
Dim fi As FileInfo() = di.GetFiles
Dim fiTemp As FileInfo
Dim fsOut As New FileStream(setTransPath, _
FileMode.Open, FileAccess.Read, _
FileShare.None)
Dim bOut() As Byte
Dim counterOut As _
System.Collections.ObjectModel.ReadOnlyCollec_
tion(Of String)
lblStatus.Text = "Sende Daten"
counterOut = My.Computer.FileSystem.GetFiles( _
setTransPath)
'Anzahl Dateien die auf dem Server liegen
Writer.Write(counterOut.Count)
Anzeigen.AnzeigePanel("Sende Daten", _
counterOut.Count)
For Each fiTemp In fi
If Connection.Connected = True Then
ReDim bOut(fiTemp.Length)
' Dateiname
Writer.Write(fiTemp.Name)
Writer.Write(fiTemp.Length)
fsOut.Read(bOut, 0, fiTemp.Length)
Else
Exit For
End If
Next
Writer.Write(AllSend) Nun ist schon an der Stelle wo der Dateiname übermittelt wird der Fehler. Und zwar wird immer gemelded das nachdem Stream keine weitere Übertragung mehr möglich ist.
Vielleicht kann mir doch noch mal einer an diesem, zugegeben etwas unübersichtlichem Beispiel, zeigen wie es richtig geht. Es ist halt etwas unübersichtlich geworden weil ich schon mehrere Möglichkeiten ausprobiert habe. |