Problem bei TCP-Dateitransfer

  • VB.NET

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

    Problem bei TCP-Dateitransfer

    Hi Leute,

    Ich hab hier eine stehende TCP-Verbindung aber beim Senden von Dateien ein Problem.

    Sender:
    Spoiler anzeigen

    Quellcode

    1. OpenFileDialog1.ShowDialog()
    2. streamw.WriteLine("***COM - sendfile***")
    3. streamw.Flush()
    4. StatusLabel.Text = "Sende Datei..."
    5. GetTime()
    6. streamw.WriteLine(OpenFileDialog1.SafeFileName)
    7. streamw.Flush()
    8. Dim readstream As FileStream
    9. readstream = New FileStream(OpenFileDialog1.FileName, FileMode.Open)
    10. Dim binreader As New System.IO.BinaryReader(readstream)
    11. streamw.WriteLine(readstream.Length() / 1024)
    12. streamw.Flush()
    13. For i = 1 To readstream.Length() / 1024
    14. streamw.WriteLine(binreader.ReadBytes(1024))
    15. streamw.Flush()
    16. Next
    17. readstream.Close()
    18. ListBox1.Items.Add(Time + " File sending attempt: " + OpenFileDialog1.SafeFileName)


    Empfänger:
    Spoiler anzeigen

    Quellcode

    1. GetTime()
    2. Dim filename
    3. filename = streamr.ReadLine
    4. ListBox1.Items.Add(Time + " File sending attempt: " + filename)
    5. Dim filebin
    6. Dim binlength
    7. binlength = streamr.ReadLine
    8. For i = 1 To binlength
    9. filebin = filebin + streamr.ReadLine()
    10. Next
    11. System.IO.File.WriteAllBytes(TextBox1.Text + filename, filebin)
    12. My.Application.DoEvents()


    Jetz schreibt er da aber garnix in meine Datei rein. Worin liegt denn mein Fehler??

    Danke schonmal! :D

    PS.: In TextBox1 steht der Pfad zum speichern ("C:\") und GetTime() schreibt nur die Zeit formatiert in die Variable Time.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Macsperience“ ()

    ReadLine ist für Strings und nicht für Binärdaten. Du musst auf der Empfängerseite das Ganze in ein Byte-Array einlesen und dann mit dem BinaryWriter schreiben. Auf der Senderseite verwendest du ja auch nen Binary(!)Reader.
    Also ich habs jetzt so geändert:
    Sender:
    Spoiler anzeigen

    Quellcode

    1. OpenFileDialog1.ShowDialog()
    2. Try
    3. streamw.WriteLine("***COM - sendfile***")
    4. streamw.Flush()
    5. StatusLabel.Text = "Sende Datei..."
    6. GetTime()
    7. streamw.WriteLine(OpenFileDialog1.SafeFileName)
    8. streamw.Flush()
    9. Dim readstream As FileStream
    10. readstream = New FileStream(OpenFileDialog1.FileName, FileMode.Open)
    11. Dim binreader As New System.IO.BinaryReader(readstream)
    12. streamw.WriteLine(readstream.Length())
    13. streamw.Flush()
    14. For i = 1 To readstream.Length() / 1024
    15. streamw.WriteLine(binreader.ReadBytes(1024))
    16. streamw.Flush()
    17. Next
    18. readstream.Close()
    19. ListBox1.Items.Add(Time + " File sending attempt: " + OpenFileDialog1.SafeFileName)
    20. Catch ex As Exception
    21. End Try


    Empfänger:
    Spoiler anzeigen

    Quellcode

    1. GetTime()
    2. Dim filename
    3. filename = streamr.ReadLine
    4. ListBox1.Items.Add(Time + " File sending attempt: " + filename)
    5. Dim binlength
    6. Dim binwriter As New System.IO.BinaryWriter(TextBox1.Text + filename)
    7. binlength = streamr.ReadLine
    8. For i = 1 To binlength
    9. binwriter.Write(streamr.Read())
    10. binwriter.Flush()
    11. Next
    12. binwriter.Close()
    13. My.Application.DoEvents()


    Trotzdem kein Erfolg!!!
    Könnt ihr mir mal ein kleines Beispiel geben? ?(
    Vielen, vielen Dank! :rolleyes:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Macsperience“ ()

    *push*

    Hey Leute, hoffentlich könnt ihr mir jetzt helfen.

    Also, ich habs jetzt so gemacht, jedoch bringt er mir wenn ich z.B. eine 50byte-Datei sende eine 70kb-Datei raus!

    Bitte helft mir.

    Sender:

    VB.NET-Quellcode

    1. client_send("---receivefile---")
    2. client_send(OpenPathDialog.SafeFileName)
    3. Dim SIZE As Int16 = 1024
    4. Dim filebuffer(SIZE) As Byte
    5. Dim filestream As Stream
    6. filestream = File.OpenRead(txtOpenpath.Text)
    7. Dim len As Long = filestream.Length - 1
    8. For i As Long = 0 To len
    9. filestream.Read(filebuffer, 0, SIZE)
    10. stream.Write(filebuffer, 0, SIZE)
    11. If i Mod 100 = 0 Then
    12. Label2.Text = (Int(i.ToString) / 1000).ToString + " kb from " + (Int(len.ToString) / 1000).ToString + " kb sent."
    13. End If
    14. My.Application.DoEvents()
    15. Next
    16. Label2.Text = (Int(len.ToString) / 1000).ToString + " kb from " + (Int(len.ToString) / 1000).ToString + " kb sent in total."
    17. filestream.Close()


    Empfänger:

    VB.NET-Quellcode

    1. state = "Receiving File..."
    2. Dim savefilename
    3. savefilename = streamr.ReadLine()
    4. Dim savepath
    5. savepath = txtSavepath.Text + savefilename
    6. Dim filestream As Stream
    7. If System.IO.File.Exists(savepath) Then
    8. System.IO.File.Delete(savepath)
    9. End If
    10. filestream = File.OpenWrite(savepath)
    11. Dim SIZE As Int16 = 1024
    12. Dim thisRead As Int16
    13. Dim dataBuffer(SIZE) As Byte
    14. While (True)
    15. thisRead = stream.Read(dataBuffer, 0, SIZE)
    16. If thisRead = 0 Then
    17. state = (Int(filestream.Length.ToString) / 1000).ToString + " kb received in total."
    18. My.Application.DoEvents()
    19. filestream.Close()
    20. filestream = Nothing
    21. Server.Stop()
    22. Server = Nothing
    23. mainserver()
    24. End If
    25. filestream.Write(dataBuffer, 0, SIZE)
    26. state = (Int(filestream.Length.ToString) / 1000).ToString + " kb received."
    27. My.Application.DoEvents()
    28. End While
    29. stream.Close()

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Macsperience“ ()