Domanda

Ho problemi a connettermi (tramite le classi Socket e XMLSocket) a un ascoltatore TCP dopo un timeout di connessione.

Ho un'applet flash che deve mantenere una connessione TCP a un server.Ho implementato i timeout utilizzando i timer, un sistema di ping-pong, ecc.Tuttavia, c'è un problema.Dopo aver chiamato Socket.connect(), il flash player (9.0.115 e molte altre versioni precedenti) invia 3 richieste di connessione tramite pacchetti SYN, con un po' di tempo in mezzo.Se a nessuno di questi viene data risposta (ad es.perché il server non è attivo), non riesco a fare in modo che l'applet [tenti di] connettersi al server.Mai.Cioè, entro la durata dell'applet.

Per chiarire e/o riassumere:

Per qualsiasi coppia host/porta fornita a Socket.connect() o XMLSocket.connect(), se la chiamata fallisce, qualsiasi successiva chiamata connect() a qualsiasi altra istanza Socket (o XMLSocket) entro la durata dell'applet Flash alla stessa coppia host/porta vengono ignorati.(Almeno per quanto ne so usando uno sniffer di pacchetti.)

Ho provato a chiamare numerosi metodi Socket, distruggendo¹ e ricreando gli oggetti, utilizzando un pool di Socket e vari altri metodi che non ricordo adesso;tutto inutilmente.

La mia soluzione attuale è notificare la pagina Web principale tramite una chiamata JavaScript e lasciare che ricarichi la mia applet.Non è una bella soluzione e non ho intenzione di implementare soluzioni alternative per i problemi Esso cause, solo perché Flash non è in grado di gestire correttamente le connessioni socket.

Devo essermi perso qualcosa di molto semplice.

Qualche idea?

1:So che non puoi davvero distruggere gli oggetti;Rimuovo semplicemente tutti i riferimenti ad essi e spero per il meglio.Non ho provato a richiamare esplicitamente il GC in questo caso.(Anche se penso di aver provato a inserire Socket all'interno di un Array e utilizzare eliminare.)


Sì, funziona come previsto se la connessione ha esito positivo (anche se la connessione si interrompe in seguito).

L'unico evento che attiva ciò è il caso in cui il server non risponde affatto;è come se Flash contrassegnasse la combinazione host/porta come "offline" e non si preoccupasse di inviarle altri pacchetti per tutta la durata dell'applet.

Sospetto un rifiuto attivo della connessione (es.host è online ma non ascolta la porta) non causa questo.

Non ricevo alcun messaggio di errore o feedback di altro tipo da Socket.

Hai mai chiamato connect() più di una volta sulla stessa coppia host/porta, quando la prima ha fallito?Come facevi a sapere che il primo connect() non è riuscito?E prima delle successive chiamate connect(), hai fatto qualcosa per reimpostare il socket?

È stato utile?

Soluzione

Ciò potrebbe essere correlato al bug irrisolto FP-269 che a sua volta potrebbe avere la stessa causa principale di FP-67.

Questa build dovrebbe essere fissata nell'attuale versione beta pubblica trovata su labs.adobe.com

Edwin Wong - [23/09/08 16:49 ]

Ti consiglierei di dare il ultima beta pubblica un colpo...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top