Archiv verlassen und diese Seite im Standarddesign anzeigen : Compiler Directiven fürs Netz
mcbrunox
11.09.2002, 12:28
Gibt es eine Compiler Directive wie z.B. {$I-} um die lästige Fehlermeldung "Asynchroner Socket Fehler" abzufangen ?
Patrik Graf
11.09.2002, 12:46
Dazu gibt es die folgendes:
Try
Hier kommt der Code rein...
Except
Hier kommt die Fehlerbehandlung (oder nicht´s) rein
end;
Delphi-Hilfe... :D
oder
try
was passiern sollte
finally
was danach auf jeden fall passieren MUSS. z.b. file schließen.
end;
Daystalker
02.09.2003, 11:47
Hi Leutz,
viel wichtiger, als das Unterdrücken :confused: der Fehlermeldung, sollte vielleicht sein, die Fehlermeldung zu beheben!
Ich habe leider auch das selbe Problem und weiß nicht einmal die Fehlerursache. :(
Wäre supa wenn hier mal kurz erläutert werden würde was die Ursache ist und wie man diese beheben kann.
Vielen Dank im Voraus...
Daystalker
Patrik Graf
02.09.2003, 12:32
Original geschrieben von Daystalker
Hi Leutz,
viel wichtiger, als das Unterdrücken :confused: der Fehlermeldung, sollte vielleicht sein, die Fehlermeldung zu beheben!
Ich habe leider auch das selbe Problem und weiß nicht einmal die Fehlerursache. :(
Wäre supa wenn hier mal kurz erläutert werden würde was die Ursache ist und wie man diese beheben kann.
Vielen Dank im Voraus...
Daystalker
Öhm... um die Ursache zu finden müssten wir den Fehler wissen... Wenn sichs um irgentwelche Exceptions handelt, dann kannst du die ja im Except oder Finally Block rausfiltern mit "On IrgentEineException do Irgentwas;"
Und wenn eine Fehlermeldung kommt, dann kann man Debuggen, schauen ab wann der Fehler auftritt und evtl. mal die Kompilerwarnungen usw. anschauen ob da nicht schon darauf hingewiesen wird... im Notfall musst du uns eben den Codeschnipsel zeigen in dem der Fehler auftritt...
Daystalker
02.09.2003, 13:44
Hi Patrik Graf,
erstma thx für die schnelle Antwort.
Also ich progge unter Borland C++ Builder und habe die selbe Exception wie oben beschrieben wurde, nur das hier der "Lösungsweg" so aussieht als wenn man "einfach die Fehlermeldung unterdrückt und gut ist". :(
Es wäre schön wenn es eine "Expection-Tabellen-Übersicht" (vorallem für Socketprogrammierung) geben würde.
Erst hatte ich Probs die Verbindung überhaupt herzustellen, deshalb habe ich einfache - wie der Kollege oben beschrieben - auch den Gedanken gehabt einfach die Exception zu unterdrücken.
Dann hatte ich da Prob das die gesendeten Daten "abhanden" gekommen sind. Bsp.: Wenn ich eine 1 MB große Datei losschicke, kommt nur ca. 8kb an. Dat hat mir vielleicht schon Kopfzerbrechen bereitet. :mauer:
Nun muß ich eine Art Array anlegen, daß dann gesendet wird wo drin enthalten ist wieviele Packete (mit 5kb kleinen Stücken vom Dateiinhalt) überhaupt übertragen werden. Das jetzige Prob ist, daß die "Packetflut" dafür sorgt, daß - wieder einmal - die Daten nicht ankommen, eine Art "Handshake" ist nun nötig...
Gibt es nicht eine einfachere Lösung? Ein ->brauchbares<- Tutorial wäre auch supa-klasse!
Vielen Dank im Voraus...
Daystalker
Patrik Graf
02.09.2003, 15:09
Hmmm... da gibt´s im übrigen sehr gute Komponenten die sowas schon drin haben. Google mal nach Indy-Komponents, da hast du auf jeden Fall alles was du brauchst und das kostenlos... :D
Felix Kaiser
02.09.2003, 15:53
Du Nase brauchst bloß schauen, wieviel Bytes tatsächlich gesendet wurden, was meinst du warum jede Senderoutine eine Möglichkeit bietet festzustellen wieviele Bytes gesendet wurden, bzw. bei nicht blockierenden/asynchronen Sockets festzustellen, wieviel Bytes an den Sendepuffer übergeben wurden.
Daystalker
03.09.2003, 08:28
Hi Patrik Graf und Felix Kaiser,
erstma thx 4 info.
Die <b>Indy-Components</b> hab ich schon erblickt, doch wollte ich mir "die Arbeit mit denen <i>ersparen</i>".
Die Idee mit der Nase.. ups, ich meine mit dem "gesendete Bytes überprüfen" ist da schon eher "meine Denkensweise", jedoch frage ich mich welche "Vorgehensweise" am effetivsten ist.
Im Prinzip möchte ich nichts anderes als eine Application (unter Borland Builder 6.0) die in einem Verzeichnis nachschaut ob Dateien vorhanden sind, wenn ja die dann rüberschickt (vorher prüft ob Gegenstelle erreichbar, klar) und abschließend die Datei - nach erfolgreichem(!) Transfer löscht. :p
Die Durchsuch-Routine und die Lösch-Routine hab ich schon, jetzt fehlt mir nur noch die "direkte, effektive Übertragung" (dafür bin ich gerade dabei eine Art Packet anzulegen (Array) mit Headerinformationen (z.B. Dateigröße, Anzahl Packete, Akt. Packet-Nr.). :D
Sollte ich während des Senden oder nach dem Senden einer Datei (weil ja in Fragmenten gesendet wird) eine Bestätigung "hin-und-her" schicken? (Und wenn ja, wie solte das realisiert werden?)
Schonmal besten Dank im Voraus...
Daystalker
Felix Kaiser
03.09.2003, 15:02
Am effektivsten ist die Methode einen Thread zu eröffnen, den Socket blockierend machen und dann in einer Schleife solange senden, bis es nichts mehr zu senden gibt. Der Vorteil: Es wird nicht gecached, was send() zurückgibt, bzw. die jeweilige Ableitung von send(), ist die Anzahl der tatsächlich gesendeten Bytes. Nicht blockierende Sockets nutzen einen Cache, wenn du sendest wird nur in den Cache geschrieben und die WinSock versucht außerhalb des Prozesses den Cache schnellstmöglich zu leeren, sprich zu senden. Darum kann es eben passieren dass nichts gesendet wird, da der Cache voll ist. Die Threadmethode mit einem blockierenden Socket ist schon die effektivste, die sich anbietet ohne alles zu kompliziert zu machen.
Daystalker
04.09.2003, 08:36
Hi Felix,
danke für die Informationen.
Die vorgestellt Lösung klingt gut und werde ich auch übernehmen. :D
Weißt Du - zufällig - wo es "gescheite" Infos (Tutorials, E-Books) zu den angesprochenen Gebieten (Threads, Blockierte Sockets und Methoden send()) gibt?
In diesem Sinne...
Daystalker
P.S.: Meine Site is noch im Aufbau und das Forum soll irgendwann mal genauso gut sein wie dieses hier! :D www.magic-seven.de (http://www.magic-seven.de)
Original geschrieben von Daystalker
jedoch frage ich mich welche "Vorgehensweise" am effetivsten ist.
Warum dann keine FTP Server und FTP Client Komponente? Dann haste alles schon mit drinnen - in Farbe und Buuund.
--edit--
Und ausserdem, wenn du das per ftp server laufen lässt, hast mit dem löschen auch keine Probleme
--/edit--
Bye
]m0rgu3[
Daystalker
26.09.2003, 09:04
Im Grunde hast Du Recht.. sicherlich ist alles bei den FTP-Komponeten dabei, jedoch - so trifft es zumindest bei meinem Projekt zu - sollte ich kein FTP verwenden. :mad: Somit mußte ich mir eine "Alternative" suchen/basteln.
Nun ist der Stand der Dinge so:
Ich habe eine Applikation die über - ich definiere sie mal - Datagramme Informationen zwischen den Client und den Server ausgetauscht werden.
Zur Zeit sehen meine Datagram in etwa so aus:
Art | Nr | Anzahl | Anhanggröße | Anhang
Art - Paketart (Anfrage/Bestätigung/Dateiinformationen/Dateiinhalt)
Nr - Aktuelle Paketnummer
Anzahl - Paketanzahl (für Dateiinhalt)
Anhanggröße - Länge des Anhang (da Paketgröße immer gleich)
Anhang - Anweisungen/Dateiname/Dateiinhalt (Fragment)
Die Applikation kommuniziert nun mit diesem "Grundgerüst" der Datagramme und erhält Bestätigungen vom Client (da der in der Regel immer etwas länger braucht um die eingehenden Informationen zu verarbeiten).
Falls Du noch eine Idee hast, ist diese immer gern gelesen!
In diesem Sinne...
Daystalker
P.S.: Erstmal besten Dank für die ganzen Infos & Co.
Verschick das ganze als record dann kannst du dir das aufpslitten wieder sparen am ende.
Lass mich raten - du machst das für die Schule, oder dein Boss is paranoid weil er keine FTP server will....
Bye
m0rgu3
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.