Ergebnis 1 bis 7 von 7
  1. #1
    Fortgeschrittener
    Registriert seit
    05.06.2007
    Beiträge
    32

    Standard [VB6] Wie sende ich mit Winsock am stabilsten?

    Moin Leute!

    Wollte mal wissen wie man per Winsock am besten/stabilsten Daten sendet.
    Ich code nämlich gerade an einem kleinen RAT. Da bin ich gerade am FileManager angekommen. Wenn ich jetzt aber die Datein aus dem Sys32 Ordner anfrage, kommt immer eine "Überlauf"-Fehlermeldung, weil meist über 2000 Dateien dadrin sind.
    Die ganzen Namen kann ich ja nicht alle auf einmal verschicken.

    Wie mache ich es also, dass dieser Fehler nicht mehr kommt?
    Wäre echt dufte, wenn es da mal was stabiles geben würde. Oo

    MfG

  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Wenn ich das richtig verstanden habe bekommst du einen Pufferüberlauf weil du zu viel auf einmal einliest?

    Falls ja:
    In C++ mache ich das immer so das ich Byte für Byte lese... das kann zwar bei großen Dateien ein bis zwei Sekunden länger dauern, aber dafür ist man immer auf der sicheren Seite.

    Falls nein:
    bitte nochmal dein Problem beschreiben ^^


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  3. #3
    Fortgeschrittener
    Registriert seit
    05.06.2007
    Beiträge
    32

    Standard

    Ja, also es läuft so ab:

    Der Server bekommt jetzt die Anfrage, dass er alle Dateinamen in z.B. System32 in eine Variable packen soll.
    Danach wird diese Variable in kleine Blöcke "zerhackt", falls sie zu groß für Winsock ist.

    Das Problem ist halt, dass es bei zu vielen Namen einfach abschmiert.

    Ich habe auch getestet, dass ich jeden einzelnen Dateinamen schicke und davor immer ein kleines "Wait" (200 ms) einsetze.
    Die 200 Millisekunden brauch man leider, weil manche Server evtl. einen zu hohen Ping haben und somit nicht alles versendet wird.
    Und wenn jetzt 2000 Dateinamen + 2000mal 200 Millisekunden verschickt werden soll, dauert das einfach zu lange..

    Ich bin auch bereit meinen kompletten Transfer Source nochmal komplett neu zu machen. Ich suche einfach eine Methode die stabil und auch gewissermaßen schnell ist bzw. nicht zu langsam.

    Weißt du was ich meine?

    MfG

  4. #4
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Selbe Methode, nicht alles in einer Variablen ablegen sondern eins nach dem anderen einlesen und senden
    Hier mal ein kleiner Psuedocode:
    Für Jede Datei In "C:\Windows\System32\"
    dateiName = Nächste Datei
    SendeZuKlient(dateiName + "<ZEILENUMBRUCH>")
    Ende

    Wenn das wirklich nicht klappt dann ein Zeichenlimit setzen, also zB. nur 400 Zeichen einlesen, dann senden und dann neu lesen bis man alles durch hat


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  5. #5
    Richard Stallman Avatar von Sawyer
    Registriert seit
    26.07.2008
    Beiträge
    2.037

    Standard

    @BlackBerry das dauert viel zu lang und ist zu umständlich , dabei besteht die Gefahr das etwas nicht ankommt

    es geht viel leichter und efizienter+

    stichwort: split

    du musst lediglich alles in einem zusammenhängendem string senden

    zwischen jeden File Name muss ein split Zeichen stehen

    danach benutzt du am besten eine schleife , die die einzelnen Namen zuweist , beispielsweise in eine listview

    MfG

  6. #6
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von The Papst
    @BlackBerry das dauert viel zu lang und ist zu umständlich
    Ich hab mal ein kleines Testprogramm in C geschrieben ( http://nopaste.free-hack.com/index.php?id=9d961fabec ) und folgendes Resultat erhalten:

    Code:
    [...]
    dbghelp.dll
    dbnetlib.dll
    dbnmpntw.dll
    
    TIME TAKEN: 0
    FILES LISTED 2539
     sent 0, rcvd 31376
    blackberry@system:~$
    Wenn man davon ausgeht, dass VB (zumindest insgesammt) langsamer als C ist und das ein Test auf localhost war wird es trotzdem sicher nicht länger als 5 Sekunden dauern, Abstürze gab es keine.
    31376 Bytes entsprechen ca. 30.7 KB - überlegt euch selber wie lange das braucht

    Nur zur Info. Der Index ( index.php ) von Free-Hack (OHNE BILDER!) ist 139.6 KB groß, also mehr als das 4.5-Fache von dem was in diesem Test gesendet wurde.


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  7. #7
    Fortgeschrittener
    Registriert seit
    05.06.2007
    Beiträge
    32

    Standard

    Zitat Zitat von The Papst
    @BlackBerry das dauert viel zu lang und ist zu umständlich , dabei besteht die Gefahr das etwas nicht ankommt

    es geht viel leichter und efizienter+

    stichwort: split

    du musst lediglich alles in einem zusammenhängendem string senden

    zwischen jeden File Name muss ein split Zeichen stehen

    danach benutzt du am besten eine schleife , die die einzelnen Namen zuweist , beispielsweise in eine listview

    MfG
    Genau, in der Art hab ich das jetzt gelöst.

    Sprich:
    Der Server kriegt die Anfrage:"Brauche Files aus Sys32"
    Dann packt er alle Dateinamen (mit split) in eine Variable solange, bis sie eine bestimmte Größe hat und verschickt wird.
    Der Client packt das aber NICHT in eine Variable sondern interpretiert es sofort und haut alles in eine Listview.

    Wenn der Server mit der For-Schleife fertig ist, schickt er noch ein "OK", damit der Client weiß, dass alles ferig ist.

    Das geht recht schnell und damit lassen sich auch viele Dateinamen stabil anzeigen lassen.


    Danke Euch beiden für die Ideen.


    MfG

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •