Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-10-2011, 01:16   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
TCP Send

Hallo und MoinMoin^^,
ich bin ein absoluter Flash Noob und möchte gern ein kleines App für mein Handy erstellen...

Ziel ist es wenn ich einen Button drücke einen String per TCP an meinen Server zu schicken

Buttons und alles drum rum ist kein problem allerdings hab ich nicht die geringste idee wie ich den String per TCP zum server bekomme

hab schon einiges gegoogelt allerdings nichts für mich brauchbares gefunden...

Kurz nochmal n Beispiel was ich möchte:
Ich drücke Button im App, String "1234" wird per TCP an Server gesendet, Server empfängt und löst Aktion aus.

ich hoffe ihr könnt mir helfen

Liebe Grüße

Tim
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 04:58   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
schau dir mal das Beispiel zu Socket in der Referenz an.

meiner Erfahrung nach macht Socket Probleme, wenn eine verbindung beendet wurde, und eine neue (auch zum selben Server, Port) aufgebaut werden soll => wegschmeissen, neues Socket-Objekt erstellen.
(vergiss aber nicht die Event-Listener wieder zu löschen, sonst bleibt das alte Socket Objekt im Speicher, bis die Anwendung geschlossen wird, und wird von der Garbage Collection nicht weggeräumt)
vielleicht hab ich aber auch einfach was falsch gemacht?
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 26-10-2011, 05:13   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
Danke erstmal für die schnelle antwort...

die referenz hab ich mir schon durchgelesen aber ich komm leider nicht mit klar

nett währe vieleicht ein beispiel das nur den allernötigsten code beinhaltet...
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 05:45   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
sowas?
PHP-Code:
var conn:Socket = new Socket();
    
conn.addEventListener(Event.CONNECTconnectHandler);                //connection established
    
conn.addEventListener(ProgressEvent.SOCKET_DATAprogressHandler);   //recieved Data
    
conn.addEventListener(Event.COMPLETEcompleteHandler);              //connection terminated
    
conn.addEventListener(IOErrorEvent.IO_ERRORtrace);                 //Server not Found, invalid Port, etc
    
conn.addEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);     //Security Sandbox (crossdomain.xml)
    
    
conn.connect(hostport);

function 
connectHandler(e:Event):void
{
    
conn.writeUTFBytes("1234");
    
conn.flush();
}

function 
progressHandler(e:ProgressEvent):void
{
    
//recieved data from server
    
trace(conn.bytesAvailableconn.readUTF());
    
    
//answer
    
conn.writeUTFBytes("OK");
    
conn.flush();
}

function 
completeHandler(e:Event):void
{
    
conn.removeEventListener(Event.CONNECTconnectHandler);
    
conn.removeEventListener(ProgressEvent.SOCKET_DATAprogressHandler);
    
conn.removeEventListener(Event.COMPLETEcompleteHandler);
    
conn.removeEventListener(IOErrorEvent.IO_ERRORtrace);
    
conn.removeEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);
    
conn null;

also das mit Error-Events durch trace verarbeiten lassen ist jetzt wirklich nur für die Demo gedacht und sollte in keinen produktiv-Code rein.
da gehört ein vernünftiges Fehler-management hin!
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 26-10-2011, 06:11   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Alternativ kannst du auch Peer2Peer verwenden. Ich habe es mir von folgendem Blog aus beigebracht: FlashRealtime.com

Funktioniert einwandfrei und das Tutorial ist sogar für die Kommunikation zwischen Rechner und Handy.

Ich habe es bisher allerdings nur über das lokale Netz gemacht. Um mit Cirrus zu experimentieren hatte ich noch keine Zeit.

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist gerade online   Mit Zitat antworten
Alt 26-10-2011, 06:13   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
Tausend dank das du dich mir annimmst^^

PHP-Code:
var conn:Socket = new Socket();
    
conn.addEventListener(Event.CONNECTconnectHandler);                //connection established
    
conn.addEventListener(ProgressEvent.SOCKET_DATAprogressHandler);   //recieved Data
    
conn.addEventListener(Event.COMPLETEcompleteHandler);              //connection terminated
    
conn.addEventListener(IOErrorEvent.IO_ERRORtrace);                 //Server not Found, invalid Port, etc
    
conn.addEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);     //Security Sandbox (crossdomain.xml)
    
    
conn.connect("192.168.0.105"3245);

    function 
connectHandler(event:MouseEvent):void
{
    
conn.writeUTFBytes("1021");
    
conn.flush();
}

function 
progressHandler(e:ProgressEvent):void
{
    
//recieved data from server
    
trace(conn.bytesAvailableconn.readUTF());
    
    
//answer
    
conn.writeUTFBytes("OK");
    
conn.flush();
}

function 
completeHandler(e:Event):void
{
    
conn.removeEventListener(Event.CONNECTconnectHandler);
    
conn.removeEventListener(ProgressEvent.SOCKET_DATAprogressHandler);
    
conn.removeEventListener(Event.COMPLETEcompleteHandler);
    
conn.removeEventListener(IOErrorEvent.IO_ERRORtrace);
    
conn.removeEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);
    
conn null;
}  
/* Mouse-Click-Ereignis
Durch Klicken auf die angegebene Symbolinstanz wird eine Funktion ausgeführt, in der Sie Ihren eigenen benutzerdefinierten Code hinzufügen können.

Anweisungen:
1. Fügen Sie Ihren benutzerdefinierten Code in einer neuen Zeile nach der Zeile "// Beginn des benutzerdefinierten Codes" ein.
Der Code wird ausgeführt, wenn auf die Symbolinstanz geklickt wird.
*/



/* Mouse-Click-Ereignis
Durch Klicken auf die angegebene Symbolinstanz wird eine Funktion ausgeführt, in der Sie Ihren eigenen benutzerdefinierten Code hinzufügen können.

Anweisungen:
1. Fügen Sie Ihren benutzerdefinierten Code in einer neuen Zeile nach der Zeile "// Beginn des benutzerdefinierten Codes" ein.
Der Code wird ausgeführt, wenn auf die Symbolinstanz geklickt wird.
*/

button_1.addEventListener(MouseEvent.CLICKconnectHandler); 
das ist der Fehlercode den ich bekomme...

Error: Error #2002: Operation attempted on invalid socket.
at flash.net::Socket/writeUTFBytes()
at Unbenannt_fla::MainTimeline/connectHandler()[Unbenannt_fla.MainTimeline::frame1:12]

ne idee woran es liegen kann?
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 06:42   #7 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868

ähm, connectHandler ist eigentlich dafür gedacht, irgendwas zu machen, sobald der Socket meldet, dass er eine Verbindung aufgebaut hat.
nicht als MouseEvent-Handler.

PHP-Code:
var conn:SocketsendBuffer:String "";
function 
connect():void
{
    
conn = new Socket();
    
conn.addEventListener(Event.CONNECTconnectHandler);                //connection established
    
conn.addEventListener(ProgressEvent.SOCKET_DATAprogressHandler);   //recieved Data
    
conn.addEventListener(Event.COMPLETEcompleteHandler);              //connection terminated
    
conn.addEventListener(IOErrorEvent.IO_ERRORtrace);                 //Server not Found, invalid Port, etc
    
conn.addEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);     //Security Sandbox (crossdomain.xml)
    
    
conn.connect("192.168.0.105"3245);
}

function 
connectHandler(e:Event):void
{
    if(
sendBuffer.length 0){
        
conn.writeUTFBytes(sendBuffer);
        
conn.flush();
        
sendBuffer "";
    }
}

function 
progressHandler(e:ProgressEvent):void
{
    
//recieved data from server
    
trace(conn.bytesAvailableconn.readUTF());
}

function 
completeHandler(e:Event):void
{
    
conn.removeEventListener(Event.CONNECTconnectHandler);
    
conn.removeEventListener(ProgressEvent.SOCKET_DATAprogressHandler);
    
conn.removeEventListener(Event.COMPLETEcompleteHandler);
    
conn.removeEventListener(IOErrorEvent.IO_ERRORtrace);
    
conn.removeEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);
    
conn null;
}

function 
send(str:String):void
{
    if(
conn && conn.connected){
        
conn.writeUTFBytes(str);
        
conn.flush();
    }else{
        
sendBuffer += str;
        
connect();
    }
}


button_1.addEventListener(MouseEvent.CLICKonClick);
function 
onClick(e:MouseEvent):void
{
    
send("1021");

du weisst schon, dass du hier UTF8-kodierte Strings versendest und keine Bytes!? ist es dass, was dein Server erwartet?
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (26-10-2011 um 06:44 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 26-10-2011, 06:50   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
JAAAAA^^
jetzt funktionierts^^

um deine Frage noch zu beantworten, ja genau das erwartet er^^

und um den Sinn und Zweck aufzulösen, ich hab an meinem Server ne Relays Karte angeschlossen mit der ich meine Haustür öffnen kann...
ich hab schon Tausend mal meinen Schlüssel vergessen aber noch nie mein Handy^^

Tausend Dank nochmal für die schnelle und kompetente Hilfe

Tim
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 07:32   #9 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
zu früh gefreut-.-

der string wird nur einmal gesendet, wenn ich erneut auf den button drücke passiert nichts mehr...

Der Server terminiert standardmässig die verbindung wenn etwas angekommen ist, dann kommt wieder der selbe Fehler wie oben schon beschrieben...
wenn ich die zeilen im server ausklammer die, die Sockeverbindung terminiern
passiert einfach garnichts mehr-.-

Flash müsste also bei jedem Buttonclick die verbindung neu aufbauen...
PHP-Code:
var conn:SocketsendBuffer:String "";
function 
connect():void
{
    
conn = new Socket();
    
conn.addEventListener(Event.CONNECTconnectHandler);                //connection established
    
conn.addEventListener(ProgressEvent.SOCKET_DATAprogressHandler);   //recieved Data
    
conn.addEventListener(Event.COMPLETEcompleteHandler);              //connection terminated
    
    //hab die beiden Error-Events jetzt einfach mal mit trace belegt,
    //wenn du das händeln willst, musst du aber ne eigene Funktion für implementieren
    
conn.addEventListener(IOErrorEvent.IO_ERRORtrace);                 //Server not Found, invalid Port, etc
    
conn.addEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);     //Security Sandbox (crossdomain.xml)
    
    
conn.connect("192.168.0.105"3245);
}

function 
connectHandler(e:Event):void
{
    if(
sendBuffer.length 0){
        
conn.writeUTFBytes(sendBuffer);
        
conn.flush();
        
sendBuffer "";
    }
}

function 
progressHandler(e:ProgressEvent):void
{
    
//recieved data from server
    
trace(conn.bytesAvailableconn.readUTF());
}

function 
completeHandler(e:Event):void
{
    
conn.removeEventListener(Event.CONNECTconnectHandler);
    
conn.removeEventListener(ProgressEvent.SOCKET_DATAprogressHandler);
    
conn.removeEventListener(Event.COMPLETEcompleteHandler);
    
conn.removeEventListener(IOErrorEvent.IO_ERRORtrace);
    
conn.removeEventListener(SecurityErrorEvent.SECURITY_ERRORtrace);
    
conn null;
}

function 
send(str:String):void
{
   
connect();
    if(
conn){
        
conn.writeUTFBytes(str);
        
conn.flush();
    }else{
        
sendBuffer += str;
        
connect();
    }
}

Button_Tuer_Unten.addEventListener(MouseEvent.CLICKonClick1);
function 
onClick1(event:MouseEvent):void
{
    
send("1021");


Button_Tuer_Oben.addEventListener(MouseEvent.CLICKonClick2);
function 
onClick2(event:MouseEvent):void
{
    
send("1022");













/* Klicken, um das AIR-Fenster zu schließen
Durch Klicken auf das angegebene Objekt wird die AIR-Anwendung beendet.
*/
Button_Schliessen.addEventListener(MouseEvent.CLICKfl_CloseWindow_6);

function 
fl_CloseWindow_6(event:Event):void
{
    
stage.nativeWindow.close();

Habs hinbekommen weiß ned obs die sauberste lösung ist aber ich hab die Connect funktion einfach nochmal vor die if abfrage in der Send funktion gesetzt... vielen dank nochmal

Geändert von timm1986 (26-10-2011 um 08:06 Uhr) Grund: Gelöst...
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 09:09   #10 (permalink)
Neuer User
 
Registriert seit: Oct 2011
Beiträge: 8
So wenn ichs unter windows teste läufts wenn ichs kompiliere und aufs handy ziehe geht garnichts mehr... app startet zwar und fürt die funktionen auch aus allerdings kommt nichts mehr beim server an...
sogar die schliessen funktion die direkt aus den Air snipets kommt funktioniert nicht...

ich hoffe ihr könnt mir noch mal weiterhelfen

liebe grüße
Tim
timm1986 ist offline   Mit Zitat antworten
Alt 26-10-2011, 09:27   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
PHP-Code:
Habs hinbekommen weiß ned obs die sauberste lösung ist aber ich hab die Connect funktion einfach nochmal vor die if abfrage in der Send funktion gesetzt... vielen dank nochmal 
wenn da eh nur ein Befehl gesendet und dann die Verbindung unterbrochen wird, versuch es mal mit ner minimalistischen Lösung:
PHP-Code:
//keine Kommunikation, nur ein Befehl senden.
function send(command:String):void
    
var socket:Socket = new Socket();
        
socket.connect("192.168.0.105"3245);
        
socket.writeUTFBytes(command);
        
socket.flush();
}

Button_Tuer_Unten.addEventListener(MouseEvent.CLICKonClick);
Button_Tuer_Oben.addEventListener(MouseEvent.CLICKonClick);

Button_Schliessen.addEventListener(MouseEvent.CLICKonClick);

function 
onClick(event:MouseEvent):void
{
    switch(
e.currentTarget){
        case 
Button_Tuer_Unten:  send("1021");  break;
        case 
Button_Tuer_Oben:   send("1022");  break;
        
        case 
Button_Schliessen:  stage.nativeWindow.close();  break;
    }

was das APP-Problem angeht, kann ich dir nicht helfen, da hab ich weder Erfahrung, noch die Möglichkeit rumzuprobieren.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
flash, string, tcp

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
XML.send? Hawke ActionScript 2 1 01-08-2009 16:25
IE7 send Jochi ActionScript 1 0 18-11-2006 18:09
send() marcodeneu ActionScript 1 1 25-10-2005 20:23
XML.send() Lidl Flash MX 2004 7 11-02-2005 12:31
XML.send axeff Flash mit XML und Webservices 6 25-05-2004 19:08


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele