Dateiübertragung mittels Bytes anstatt Base64 =(

  • VB.NET

    Dateiübertragung mittels Bytes anstatt Base64 =(

    Hallo schönen guten Tag, ich arbeite zurzeit an einem Messenger für Support-zwecke oder einfach für Freunde untereinander...
    Soweit funktioniert das versenden der Textnachrichten, kann grundlegend dateien starten und Systeminfos holen...

    Nun versuche ich seit einer Weile das meine Anwendung auch Dateien übertragen kann, das geht auch mittels Base64-Codierung (was echt lange dauert beim 2 MB auf dem localhost)

    Nachgedacht habe ich über eine lösung per filestream oder ähnliches... Aber ich weiss nicht wie ich dass realisieren soll :( ich poste einfach mal die für das senden und empfangen wichtigen teile
    wer noch teile braucht einfach nachfragen! :)

    LG Guido

    Mittels dieser Sub sende ich nachrichten.... (Der Streamwriter wird hier festgelegt und genutzt)

    VB.NET-Quellcode

    1. Private Sub _Client_Responce(ByVal Stream As String)
    2. connect(ÜberprüfeAdresse(Me.Absender), Me.Aport)
    3. Try
    4. ssend_thread.Start(Stream)
    5. Catch ex As Exception
    6. Me.Invoke(New _System_Sende(AddressOf System_Sende), Stream)
    7. End Try
    8. End Sub
    9. Private Sub _write_Stream(ByVal stream As String)
    10. Try
    11. Dim nvwriter As New StreamWriter(nvclient.GetStream())
    12. If Connected = True Then
    13. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_Write_Stream()) writing... " & vbCrLf)
    14. nvwriter.Write(stream)
    15. nvwriter.Flush()
    16. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_Write_Stream()) flushing... " & vbCrLf)
    17. nvwriter.Close()
    18. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_Write_Stream()) Stream Closed... " & vbCrLf)
    19. stream = Nothing
    20. pinger_started = True
    21. Pinger.Start()
    22. Timeout.Start()
    23. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] ping and timeout started... " & vbCrLf)
    24. Else
    25. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_Write_Stream()) The Client is not connected!... " & vbCrLf)
    26. End If
    27. Catch ex As Exception
    28. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_Write_Stream()) " & ex.Message & vbCrLf)
    29. End Try
    30. End Sub


    Und damit lese ich das gesendete aus:

    VB.NET-Quellcode

    1. Private Sub _Read_Stream()
    2. Try
    3. If nvserver.Pending = True Then
    4. Message = ""
    5. nvclient = nvserver.AcceptTcpClient()
    6. Dim nvreader As New StreamReader(nvclient.GetStream())
    7. While (nvreader.Peek > -1)
    8. Message = Message + Convert.ToChar(nvreader.Read()).ToString
    9. End While
    10. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (_check_Agent()) starting... " & vbCrLf)
    11. Get_StreamType(Message)
    12. Else : End If
    13. Catch ex As Exception
    14. If DebugMode = True Then infobox.AppendText(Format(Now, "dd.MM.yyyy hh:mm:ss") & " [Debug] (Read_Stream()) " & ex.Message & vbCrLf)
    15. End Try
    16. End Sub


    hiermit handle ich den dateitransfer aus:

    VB.NET-Quellcode

    1. Case "#3"
    2. If Parameter = True Then
    3. _Client_Responce(";#4" & Me.filename) ' Sende den Dateinamen, für die speicherung
    4. Else
    5. _Client_Responce(";#8Die Anfrage wurde abgelehnt!" & Me.filename) ' Meldung zurück senden
    6. End If
    7. Case "#4" 'Wir erhalten hier den dateinamen....
    8. Me.File_name = Parameter
    9. _Client_Responce(";#5") ' Und sagen dem Partner dass er uns die Datei sanden kann...
    10. Case "#5" ' Datei kodieren... und senden...
    11. Dim buffer1() As Byte = File.ReadAllBytes(Me.filename) ' Datei einlesen.....
    12. _Client_Responce(";#6" & Convert.ToBase64String(buffer1)) 'Senden der Datei...
    13. Case "#6" 'Senden... der datei...
    14. Dim buffer2() As Byte = Convert.FromBase64String(Parameter)
    15. File.WriteAllBytes(My.Application.Info.DirectoryPath + "\" + File_name, buffer2) 'Schreiben, auf der festplatte
    16. infobox.AppendText("[Netvision-Meldung]: Datei erhalten..." & vbCrLf & vbCrLf)
    17. _Client_Responce(";#8Datei gesendet!" & vbCrLf & vbCrLf) ' Senden der Rückmeldung dass wir die Datei erhalten haben...
    18. Case "#2"

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