Dateiübertragung - lässt nur eine Datei zu... =(

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von MrTweek.

    Dateiübertragung - lässt nur eine Datei zu... =(

    Hallo Ihr :D

    ich habe das Problem, dass wenn ich Dateien senden möchte, immer nur eine Datei übertragen wird, nach dem die datei übertragen wurde (erfolgreich), habe ich das problem, dass ich eine 2te nicht mehr übertragen kann...

    damit sende ich von einer seite:

    VB.NET-Quellcode

    1. Public Function _File_Send(ByVal adress As String, ByVal port As Integer, ByVal filetosend As String)
    2. Dim fileclient As New System.Net.Sockets.TcpClient
    3. Try
    4. fileclient.Connect(adress, port)
    5. If fileclient.Connected = True Then
    6. Dim fstm As System.IO.Stream
    7. Dim buffer1() As Byte = My.Computer.FileSystem.ReadAllBytes(filetosend)
    8. Dim netstream As System.Net.Sockets.NetworkStream = fileclient.GetStream()
    9. netstream.Write(buffer1, 0, buffer1.Length)
    10. netstream.Flush()
    11. Else
    12. MsgBox("client nicht verbunden...")
    13. End If
    14. Catch ey As Exception
    15. MsgBox("File_Send: " & ey.Message)
    16. End Try
    17. End Function



    und empfange hiermit auf der anderen seite...

    VB.NET-Quellcode

    1. Private Sub BW_Empfangen_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BW_Empfangen.DoWork
    2. Dim source As Stream = e.Argument
    3. Try
    4. Dim ReceivedBytes(bytestoread) As Byte
    5. Dim myFileStream As New System.IO.FileStream(My.Computer.FileSystem.SpecialDirectories.Desktop & "\" & File_name, System.IO.FileMode.OpenOrCreate) 'Datei auswählen
    6. Dim ia As Long
    7. For i As Integer = 0 To bytestoread
    8. myFileStream.WriteByte(source.ReadByte)
    9. Next
    10. myFileStream.Flush()
    11. BW_Empfangen.CancelAsync()
    12. If BW_Empfangen.CancellationPending Then
    13. Exit Sub
    14. End If
    15. Catch ex As Exception
    16. End Try
    17. End Sub


    was ich erreichen möchte ist, dass ich mit der gleiche bestehenden verbindung mehrere Dateien einzeln senden kann...

    VB.NET-Quellcode

    1. Private Sub ListenTofConnection(ByVal fcon As fConnection)
    2. BW_Empfangen.RunWorkerAsync(fcon.stream)
    3. End Sub
    interessant...
    BW_Empfangen.CancelAsync()

    If BW_Empfangen.CancellationPending Then
    Exit Sub
    End If

    Warum lässt du das nicht einfach weg, hat genau denselben Effekt...

    Was du für deine Übertragung brauchst ist eine Trennung zwischen den einzelnen Dateien, am besten schickst du direkt am Anfang die Länge der Datei mit, dann weißt du, wann diese fertig ist und weiß, dass anschließend die nächste datei kommt...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich habe den Code nicht von Null auf an selbst geschrieben, jediglich abgeändert...

    Das mit dem Backgroundwalker ist deshalb so geregelt, da er den Download im Hintergrund ausführen soll, und jediglich den zustand an einen Progressbar senden soll...
    das funktioniert auch soweit... aber wie gesagt die Datei wird korrekt gesendet und auch empfangen... aber wie gesagt ich kann nur 1 Datei senden...
    Wobei ich denke, dass das Problem an der Aufmachung liegt... der anbindung liegt...


    VB.NET-Quellcode

    1. BW_Empfangen.CancelAsync()
    2. If BW_Empfangen.CancellationPending Then
    3. Exit Sub
    4. End If


    Das war ein versuch, dem BW zusagen, dass er seine Arbeit "zu beenden hat xD weil er immer meldet, dass er keine 2 gleichzeitigen Aufgaben ausführen kann... ;( xD
    Aber das ist Crap-Code (der war nur zur Problembehandlung gedacht... :D

    ich werde das mal bereinigen, ich glaube ich habe da schon ne möglichkeit gefunden.... woran das liegen kann... :)
    Der Stream ist falsch verbaut... :D