2010-11-30 4 views
0

Ich habe ein Problem mit Sockets in Flash Builder 4. Der folgende Code sendet eine Reihe von Bytes an einen empfangenden C# sockerServer. Wenn ich den Fehler, den ich manuell in Flash Builder erhalte, verwerfe, werden die Bytes geschickt und alles kommt so, wie es auf 127.0.0.1:10 sein sollte. Wenn ich jetzt die gleichen Ergebnisse erzielen könnte, ohne dass in Flex ein Fehler angezeigt wird.Flex - Socket.close() Probleme (# 2031: Socket Error)

Also, ich habe zwei Fragen:

1) Warum es einen Fehler zurückgibt, wenn ich versuche, die Steckdose zu schließen? Siehe closeConnection() unten für den Kontext. Ich habe versucht, es vor dem zu spülen, was nicht geholfen hat.

2) Warum wird nichts gesendet, wenn ich socket.flush() verwende?

package 
{ 
import flash.events.IOErrorEvent; 
import flash.net.Socket; 
import flash.utils.ByteArray; 

public class socketClient 
{ 
    private var socket:Socket; 
    public function openConnection(address:String, port:int):void 
    { 
     if (socket != null && socket.connected) 
      socket.close(); 

     socket = new Socket(); 
     try { 
      socket.connect(address, port);    
     } 
     catch(e:Error) { }    
    } 
    public function sendProtocol(p:socketProtocol):void { 
     //p.serialize() gets me a bunch of bytes in a ByteArray 
     var buffer:ByteArray = p.serialize(); 
     socket.writeBytes(buffer, 0, buffer.length); 
     //Nothing happens when I flush 
     socket.flush(); 
    } 
    public function closeConnection():void { 
     //As soon as I get to socket.close(), I get this 
     //"Unhandled IOErrorEvent:. text=Error #2031: Socket Error." 
     socket.close(); 
    } 
} 

}

verwende ich die Klasse wie folgt:

var socket:socketClient = new socketClient(); 

//works fine, I see the connection on the server 
socket.openConnection("127.0.0.1", 10); 

//no errors, but nothing sent 
socket.sendProtocol(protocol); 

//returns the error. (if manually dismissed, data is sent) 
socket.closeConnection(); 
+0

Ähnliche Ausgabe: http://StackOverflow.com/Questions/3645988/Socket-error-Sometimes –

+0

Ja, ich habe das gesehen und versucht, das Ereignis hinzufügen: IOErrorEvent. Hat mir jedoch nicht geholfen, das Thema zu verstehen. Ich habe auch kein Problem, die Steckdose zu öffnen. Stellt auf dem empfangenden Server eine Verbindung her. – BlueVoodoo

+0

Fügen Sie es einfach an der Unterseite hinzu. – BlueVoodoo

Antwort

0

Ich löste es schließlich nach diesem Hämmern, da ich die Frage gepostet.

Ich hatte einen

socket.addEventListener(flash.events.Event.CLOSE, closeHandler) 

und tun das socket.close() von dort hinzuzufügen.