Dateien stückchenweise versenden über TCP

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Bei der Übertragung einer Datei, macht es Sinn, auch noch andere Daten ausser dem tatsächlichen Dateiinhalt zu übertragen.
    Zum Beispiel den Dateinamen. Oder das Format. Oder das Erstellungsdatum.

    Nun ist Filetransfer nicht so selten, dass du extra dafür ein neues Protokoll erfinden müsstest.
    Da haben sich schon andere Leute Gedanken darüber gemacht.
    Da gibt es zum Beispiel das File-Transfer-Protokoll FTP.

    Hier im Forum hat sich sogar jemand mal die Mühe gemacht, eine FTPlib zu programmieren.
    [Release] FTPLib 2.1.1.0
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Danke,der deklariert aber GZip nichthier ist der jetzige Code:


    Imports System.Net.Sockets
    Imports System.IO
    Imports System.Threading
    Imports System.IO.Compression
    Imports System
    Imports System.Security.Cryptography
    Module Module1

    Dim IpAdresse As String = "192.168.2.103"
    Dim Port As Integer = 36
    Public Sub Main()
    Dim tmp_compressed As String = cl_Save.Compress(TextStringToByteArray("Test"))
    Dim tmp_decompressed As String = ByteArrayToTextString(cl_Save.DecompressString(tmp_compressed))
    Console.WriteLine("Compressed String in Base64 of ""{0}"": {1}", "Test", tmp_compressed)
    Console.ReadLine()
    Console.WriteLine("Decompressed String of ""{0}"": {1}", tmp_compressed, tmp_decompressed)
    Console.ReadLine()
    End Sub

    Public Function TextStringToByteArray(ByRef str As String) As Byte()
    Dim enc As System.Text.Encoding = System.Text.Encoding.Default

    Return enc.GetBytes(str)
    End Function

    Public Function ByteArrayToTextString(ByRef Barr() As Byte) As String
    Dim enc As System.Text.Encoding = System.Text.Encoding.Default

    Return enc.GetString(Barr)
    End Function
    Sub Main2()
    Console.WriteLine("Ich bin der Client")
    Dim TCP_Client As New TcpClient
    Try
    TCP_Client.Connect(IpAdresse, Port)
    Console.WriteLine("Verbindung hergestellt!")

    Dim Datenreader As New StreamReader(TCP_Client.GetStream)
    Dim Datenwriter As New StreamWriter(TCP_Client.GetStream)
    Dim pfad As String = "C:\Chattextdatei.txt"

    Dim t As New Thread(AddressOf DatenStromAuslesen)
    t.IsBackground = True
    t.Start(Datenreader)

    While True
    Dim Eingabe As String = Console.ReadLine
    If Eingabe = "exit" Then
    Exit Sub
    Else
    Datenwriter.WriteLine(Eingabe)
    Datenwriter.Flush()
    End If
    If Eingabe = "datei" Then
    Datenwriter.WriteLine("file|name|" & GZip.Compress(File.ToByteArray))
    Datenwriter.Flush()
    End If
    End While

    Catch ex As Exception
    Console.WriteLine("Ein Fehler ist aufgetretten" & ex.Message)
    End Try
    Console.ReadLine()
    End Sub
    Private Sub DatenStromAuslesen(ByVal Datenreader As StreamReader)
    Try
    Dim Antwort As String = Datenreader.ReadLine
    Console.WriteLine(Antwort)
    Catch ex As Exception
    Console.WriteLine("Fehler :" & ex.Message)
    End Try

    End Sub
    End Module
    ich verstehe nicht recht, was der GZip-Komprimier-Algorithmus mit Datenversand im Internet zu tun hat.
    Nagut, man kann damit die Datenmenge reduzieren, aber erstmal müsstemandoch die VersendeFrage lösen.
    FTP klingt iwie logisch, und eiglich sollte es iein Ding geben, mit dem man FTP über die TCP-Verbindung abwickeln. FTP setzt ja auf TCP auf. Aber Keine Ahnung - wie.