Frage

Ich habe Probleme beim Herstellen einer Verbindung (über die Klassen Socket und XMLSocket) zu einem TCP-Listener nach einer Verbindungszeitüberschreitung.

Ich habe ein Flash-Applet, das eine TCP-Verbindung zu einem Server aufrechterhalten muss.Ich habe Timeouts mithilfe von Timern, einem Ping-Pong-System usw. implementiert.Es gibt jedoch ein Problem.Beim Aufruf von Socket.connect() sendet der Flash Player (9.0.115 und viele andere Stables davor) drei Verbindungsanfragen über SYN-Pakete mit etwas Zeit dazwischen.Wenn keine dieser Fragen beantwortet wird (z. B.weil der Server ausgefallen ist), kann ich das Applet nicht dazu bringen, eine Verbindung zum Server herzustellen.Immer.Das heißt, innerhalb der Lebensdauer des Applets.

Zur Verdeutlichung und/oder Zusammenfassung:

Für jedes Host/Port-Paar, das an Socket.connect() oder XMLSocket.connect() übergeben wird, gilt: Wenn der Aufruf fehlschlägt, werden alle nachfolgenden connect()-Aufrufe an alle anderen Socket- (oder XMLSocket-)Instanzen ausgeführt innerhalb der Lebensdauer des Flash-Applets zum selben Host/Port-Paar werden ignoriert.(Zumindest soweit ich das mit einem Paket-Sniffer beurteilen kann.)

Ich habe versucht, zahlreiche Socket-Methoden aufzurufen, die Objekte zu zerstören¹ und neu zu erstellen, einen Socket-Pool und verschiedene andere Methoden zu verwenden, an die ich mich momentan nicht erinnern kann;alles ohne Erfolg.

Meine aktuelle Lösung besteht darin, die übergeordnete Webseite über einen JavaScript-Aufruf zu benachrichtigen und sie mein Applet neu laden zu lassen.Es ist keine schöne Lösung, und ich habe nicht vor, Workarounds für die Probleme zu implementieren Es Ursachen, nur weil Flash Socket-Verbindungen nicht richtig verarbeiten kann.

Mir muss etwas ganz Einfaches fehlen.

Irgendwelche Ideen?

1:Ich weiß, dass man Gegenstände nicht wirklich zerstören kann;Ich entferne einfach alle Verweise darauf und hoffe das Beste.Ich habe in diesem Fall nicht versucht, den GC explizit aufzurufen.(Obwohl ich glaube, ich habe versucht, den Socket in ein Array zu stecken und zu verwenden löschen.)


Ja, es funktioniert wie erwartet, wenn die Verbindung erfolgreich ist (auch wenn die Verbindung später abbricht).

Das einzige Ereignis, das dies auslöst, ist der Fall, dass der Server überhaupt nicht antwortet;Es ist, als ob Flash die Host/Port-Kombination als „offline“ markiert und sich während der Lebensdauer des Applets nicht die Mühe macht, weitere Pakete an sie zu senden.

Ich vermute eine aktive Verweigerung der Verbindung (z.B.(Host ist online, lauscht aber nicht auf den Port) verursacht dies nicht.

Ich erhalte vom Socket keine Fehlermeldung oder sonstige Rückmeldung.

Haben Sie jemals connect() mehr als einmal für dasselbe Host/Port-Paar aufgerufen, als der erste fehlgeschlagen ist?Woher wussten Sie, dass das erste connect() fehlgeschlagen ist?Und haben Sie vor den nachfolgenden connect()-Aufrufen irgendetwas unternommen, um den Socket zurückzusetzen?

War es hilfreich?

Lösung

Dies könnte mit dem ungelösten Fehler zusammenhängen FP-269 was wiederum die gleiche Grundursache haben kann wie FP-67.

Dieser Build sollte in der aktuellen öffentlichen Beta -Veröffentlichung festgelegt werden labs.adobe.com

Edwin Wong – [23.09.08 16:49 Uhr]

Ich würde Ihnen empfehlen, das zu geben neueste öffentliche Beta ein Schuss...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top