TCP/IP Dateien senden

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von KnifeHunter.

    TCP/IP Dateien senden

    Hallo an alle ;),

    ich hab mal wieder eine neue frage...

    ich möchte dateien über ein programm versenden(übers internet).


    wenn ich jetzt eine größere datei versenden möchte, habe ich das problem, dass ich den string, den in ich aus dem bytearray mache, zerschnippeln muss, da er sonst zu lang ist. ich habe jetzt der einfachheit halber 1024 bytes genommen. das heißt jeder string entspricht einem kb.

    nur habe ich beim zusammensetzen der strings probleme...

    ich habe also ein array. jedes "feld" enthält einen string. von denen habe ich jetzt reichlich. und jetzt muss zum schreiben der datei jeder string in form von bytes wieder in ein einziges array. nur meine schleife macht nicht so ganz mit...

    hier mal der testcode:

    VB.NET-Quellcode

    1. Dim sp() As String
    2. sp = TextBox2.Text.Split("|")
    3. Dim bytes() As Byte
    4. For Each itm In sp
    5. bytes = Convert.FromBase64String(itm)
    6. If bytes.Length = Label2.Text Then
    7. IO.File.WriteAllBytes(Application.StartupPath & "\Downloads" & "\text.jpg", bytes)
    8. End If
    9. Next


    versuche hier ein bild zu senden... aber das mit dem zusammensetzen klappt nicht so ganz wie ich das möchte.


    MfG EsTari

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

    KnifeHunter schrieb:

    wenn du lesen könntest, dann wüsstest du dank der überschrift, dass ich sie weder über ftp noch über http sondern über tcp/ip verschicke.
    Sowohl FTP als auch HTTP setzen auf TCP auf.
    Wenn du dir ein eigenes Anwendungsprotokoll schreiben willst, solltest du wenigstens die Grundlagen des Referenz-Modells beherrschen, damit du weisst, wovon du redest.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hui, hier geht's ja rau zu.

    Meiner Meinung nach passt das mit den Strings ned. Aus meiner Sicht ist Binärdateien erst (wie auch immer) als Zeichenkette zu konvertieren und danach rückwärts wieder nach binär zu dekodieren unnötig.

    Vermutlich arbeitest Du direkt mit Sockets (TCP, nicht UDP).

    So was habe ich auch schon in der Vergangenheit (1995 ;) gemacht, ob das auch über alle Firewalls hinweg direkt übers Internet geht bin ich mir unsicher.

    Heutzutage habe ich das schon erfolgreich mit SOAP-Webdiensten gemacht, das ist ggf. weniger effizient als direkt auf Socket-Ebene, dafür HTTP/HTTPS und auf den meisten Firewalls geht's durch.
    ich schätze mal, ich habe meinen code nicht richtig erklärt.

    ich lese eine beliebige datei als bytes ein. anschließend wird dieses array (das in dem die gesammte datei ist) wieder stück für stück in ein weiteres array geschrieben. dieses zweite array hat die größe 1024.
    dieses 1024 bytes große array wird anschließend mit

    VB.NET-Quellcode

    1. Convert.ToBase64String(ARRAY)
    in einen string konvertiert und gesendet.
    solange bis alle teile gesendet wurden.

    jetzt geht es eben nur darum, diese strings, von denen jeder einem 1024 byte großem array entspricht, wieder in eine datei zu schreiben.

    die konvertierung ist desshalb nötig, da ich über einen streamwriter sende und ein string von der performance her am bessten geht (meiner erfahrung nach).

    also kommen jetzt eben nacheinander strings rein, die ich wieder alle in ein array schreiben möchte, um dann anschließend aus diesem array die datei erstellen zu können.

    das mit dem versenden geht prima, desshalb möchte ich jetzt eigentlich auch kein anderes verfahren anwedenden, es sei denn es gibt eine noch bessere (besser im sinne von einer besseren performance) möglichkeit dateien über TCP zu versenden.

    das programm ist noch sehr langsam. das besste waren bisher 11 kb/s
    aber das war das schnellste, was ich aus diesem verfahren herausholen konnte.
    wenn es bessere möglichkeiten gibt, dann wäre ich euch dankbar, wenn ihr mir diese mitteilen würdet.

    ansonsten bräuchte ich wie gesagt lediglich ein wenig hilfe, wie ich die strings wieder in eine datei bekomme.



    MfG EsTari