Socket senden und empfängt nichts

Thopeto

Erfahrenes Mitglied
Hallo!

Ich kämpfe gerade mit Sockets bei Flex. Ich benutze die Socket Klasse und stelle eine Verbindung zum localhost her. Er zeigt mir auch an, dass die Verbindung gelungen ist, aber socket sendet und empfängt anscheinend nichts. Mit telnet geht das wunderbar, das server script funktioniert somit, bloss flex zickt rum. Hier mal etwas code:

die crossdomain.xml
Code:
<cross-domain-policy>
  <allow-access-from domain="localhost" to-ports="8080"/>
</cross-domain-policy>

nun die Ausprägung der Socket klasse:
Code:
Security.allowDomain("localhost");
            Security.loadPolicyFile("xmlsocket://localhost/crossdomain.xml");
            
            this.network = new MySocket();
           this.network.connect("localhost",8080);

und die socket klasse selber:
Code:
package blsbls
{
    import flash.errors.IOError;
    import flash.events.DataEvent;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.events.TimerEvent;
    import flash.net.Socket;
    import flash.net.XMLSocket;
    import flash.utils.Timer;
    
    import mx.controls.Alert;
    
    public class MySocket
    {
        private var socket:Socket;
        private var timer:Timer;
        
        public function MySocket()
        {
            this.socket = new Socket();
            this.socket.addEventListener(Event.CONNECT, onConnected);
            this.socket.addEventListener(Event.CLOSE, onClose);
            this.socket.addEventListener(DataEvent.DATA, onReceive);
            this.socket.addEventListener(IOErrorEvent.IO_ERROR, onError);
            this.socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, OnSecurityError);
            
            timer = new Timer(10);
            timer.addEventListener(TimerEvent.TIMER, onRead);

        }

        public function connect(host:String, port:int):void {
            try {
                if(this.socket.connected)
                    this.socket.close();
                
                this.socket.connect(host,port);
            } catch(e:Error) {
                Alert.show(e.message);
            }
        }
        
        private function onConnected(event:Event):void {
            Alert.show("Connected");
            this.timer.start();
            //this.socket.send("hallo server");
            //this.socket.;
            //this.socket.flush();
            
            //this.send("##hi server##");
        }
        
        private function onClose(event:Event):void {
            Alert.show("Closed");
        }
        
        private function onError(event:IOErrorEvent):void {
            Alert.show(event.text);
        }
        
        private function OnSecurityError(event:SecurityErrorEvent):void {
            Alert.show(event.text);
        }
        
        private function onReceive(event:DataEvent):void {
            Alert.show(event.text);
        }
        
        public function send(obj:String):void {
            try {
                this.socket.writeUTFBytes(obj);
                this.socket.flush();
                //this.socket.send(obj);
            }
            catch(e:IOError) {
                Alert.show(e.message);
            }
        }
        
        private function onRead(event:TimerEvent):void {
            var str:String = this.socket.readUTFBytes(this.socket.bytesAvailable);
            
            if(str.length > 0)
                Alert.show(str);
        }
    }
}

Hat jmd nen tipp, warum telnet mit dem server wunderbar t aber flex eine verbindung zwar aufbaut, aber keine daten sendet und empfängt? Hauptsächlich keine daten versendet?

Gruß
Thorsten

EDIT: während die flex anwendung läuft, sendet die anwendung nichts. schließe ich dann diese, schickt es auf einmal alles ab. warum sendet flex die daten zum server erst, wenn man die flex anwendung schließt?
 
Zuletzt bearbeitet:
Hi,
du musst darauf Achten, dass Flash mit einem Nullterminierten String Sendet und Empfängt, dein Server muss also an die Nachrichten die er sendet \0 anhängen, sprich:
terminator = "\0";
In meinem selbstgeschriebenen Perl socket server sah das so aus:
$/ = "\0";
Wenn der Terminator in einem String auftritt weiß der Socketserver damit, dass die aktuelle Nachricht zuende ist und nichts mehr folgt.
----
Hier noch ne kleine Hilfe:
http://livedocs.adobe.com/flash/9.0...htm?context=LiveDocs_Parts&file=00000318.html

Ich fang nämlich auch gerade wieder mit Socket Servern an, bin gerade dabei mit einen eigenen in Java zu schreiben, mein Perl server hatte zu wenig Funktionen.
 
Zuletzt bearbeitet:
ähem, danke für die späte antwort, aber das problem ist seit 2 wochen bereits gelöst. ausserdem lag der fehler nicht am server sondern am client. Flex sendet kein 0 Byte. Dies muss manuel vorgenommen werden, wie das:

Code:
this.socket.writeByte(0);
 

Neue Beiträge

Zurück