Hmmm, funktioniert nicht. Die Fehlermeldungen sind jetzt auch so komplex das ich sie gar nicht wiedergeben kann.
Ich meine ich bin mir sicher dass da irgendwas Asynchorn läuft. Also irgendwo sende ich was wo ich empfangen muss, oder umgekehrt.
Ich poste einfach mal den kompletten Code, er ist zwar inzwischen wieder etwas unübersichtlich, weil ich so viel ausprobiert habe. Aber vielleicht ist es ja nur eine Kleinigkeit die ich da übersehe.
Code Sender:
' Variablen für ausgehende Daten
Dim diOut As DirectoryInfo
Dim fiOut As FileInfo()
Dim fiTempOut As FileInfo
' Variablen für eingehende Daten
Dim theRequest As String = ""
While True
Try
Listener = New TcpListener(Net.IPAddress.Any, setPort)
Listener.Start()
Connection = Listener.AcceptSocket()
SocketStream = New NetworkStream(Connection, FileAccess.Read, _
True)
Writer = New BinaryWriter(SocketStream)
Reader = New BinaryReader(SocketStream)
' Verbindung bestätigen
Writer.Write(ConnectOK)
Try
theRequest = WaitForResponse()
Do
Select Case theRequest
' Wenn aufgefordert wurde alle Dateien zu senden
Case SendFiles
diOut = New DirectoryInfo(setTransPath)
fiOut = diOut.GetFiles
For Each fiTempOut In fiOut
Dim fn As String = fiTempOut.Name
Dim fs As New FileStream(setTransPath & fn, _
FileMode.Open)
Dim b(fs.Length - 1) As Byte
fs.Read(b, 0, b.Length)
fs.Close()
Writer.Write("SendFile")
Writer.Write(fn)
Writer.Write(CInt(b.Length))
Writer.Write(b)
Next
Writer.Write(AllSend)
End Select
theRequest = WaitForResponse()
Loop While (theRequest <> Disconnect AndAlso _
Connection.Connected)
Catch InputOutputException As Exception
BackgroundWorker1.ReportProgress(1, _
InputOutputException.ToString)
Finally
Writer.Close()
Reader.Close()
SocketStream.Close()
Connection.Close()
End Try
Catch InputOutputException As Exception
BackgroundWorker1.ReportProgress(1, InputOutputException)
Finally
Listener = Nothing
Writer = Nothing
Reader = Nothing
SocketStream = Nothing
Connection = Nothing
Listener = Nothing
theRequest = ""
End Try
End While Code Empfänger:
' Variablen für einhehende Daten
Dim theRequest As String
client = New TcpClient
client.Connect(SetIPAdress, setPort)
'networkstream binden
Stream = client.GetStream()
Writer = New BinaryWriter(Stream)
Reader = New BinaryReader(Stream)
Try
theRequest = WaitForResponse()
If theRequest = ConnectOK Then
Writer.Write(SendFiles)
Do
Dim fn As String = Reader.ReadString()
Dim l As Integer = Reader.ReadInt32()
Dim b() As Byte = Reader.ReadBytes(l)
Dim fs As New FileStream(fn, FileMode.Create, _
FileAccess.Write, FileShare.None)
fs.Write(b, 0, l)
fs.Close()
Loop While (client.Connected)
End If
Catch InputOutputException As Exception
Anzeigen.AddToLog(InputOutputException.ToString)
End Try |