sockets chat
TRANSCRIPT
Cercul de Rich Internet ApplicationsUtilizarea socketurilor pentru
comunicarea în timp real
Facultatea de InformaticăIași
http://www.info.uaic.ro/~flash 2
• Socket-urile sunt utilizate pentru comunicarea în timp real.
• Există două protocoale de bază:TCP (transport control protocol), UDP (user datagram protocol)
• TCP este sigur (fiecare pachet care pleacă de la sursă va fi confirmat de către destinatar)
• UDP este mai rapid (deoarece sursa nu mai așteaptă confirmări) - problema este că pachetele pierdute nu sunt retransmise
Comunicare
http://www.info.uaic.ro/~flash 3
• În unele cazuri este preferată comunicarea TCP (de exemplu într-un joc online nu se admit pierderi de pachete – dacă s-ar pierde chiar pachetul în care eroul a omorât monstrul, clientul ar putea crede că acesta este încă în viață)
Comunicare
http://www.info.uaic.ro/~flash 4
• În unele cazuri este preferată comunicarea UDP – atunci când transmitem voce, nici nu ne interesează ca aplicația sursă să retransmită un pachet care s-a pierdut acum două secunde.
• De asemenea într-o astfel de aplicație (pentru transmiterea de voce) ne interesează viteza cu care are loc comunicarea.
Comunicare
http://www.info.uaic.ro/~flash 5
• Vom utiliza comunicarea TCP (sigură) pentru a realiza un chat.
• Un calculator din Internet este identificat printr-o adresă unică – adresa IP. Va trebui să utilizăm o astfel de adresă pentru a ști cui transmitem (sau care este serverul).
• Pentru a identifica aplicația căreia îi transmitem informația vom utiliza un număr special denumit port (o valoare între 0 – 65535).
Comunicare - TCP
http://www.info.uaic.ro/~flash 6
• Adresa IP împreună cu portul formează un socket care este identificat de obicei printr-o scriere de tipul: [adresa_ip:port]
• Exemplu: 192.168.1.1 : 4444
Comunicare - TCP
http://www.info.uaic.ro/~flash 7
• Exemplificarea componentelor Flex– Controls– Layout
• Folosirea socket-urilor și tratarea evenimentelor• Componenta server – deja facută în Java
Use Case - XChat
http://www.info.uaic.ro/~flash 8
• Controls– Label, TextInput, TextArea, Button
• Layout– HBox, VBox
Flex Components
http://www.info.uaic.ro/~flash 9
• connect(url, port)• addEventListener(EventType, handler)– Event.CONNECT– ProgressEvent.SOCKET_DATA
• writeUTFBytes(string + “\n”)
Obiectul Socket
http://www.info.uaic.ro/~flash 10
Interfața - Layout
widht=“100%” height=“100%”
http://www.info.uaic.ro/~flash 11
Interfața – id-uriid=“username”
id=“ecran”
action=“sendData()”Id=“textInput”
initialize=“init()”
http://www.info.uaic.ro/~flash 12
public function init():void{
sock.addEventListener(ProgressEvent.SOCKET_DATA, newData);
sock.addEventListener(Event.CONNECT, connectHdlr);sock.connect(“192.168.0.1”, 4444);
}
COD
http://www.info.uaic.ro/~flash 13
public function sendData():void{
sock.writeUTFBytes(username.text + ": " + txtInput.text + "\n");
sock.flush();txtInput.text = "";
}public function newData(e:ProgressEvent):void{
ecran.text +=sock.readUTFBytes(sock.bytesAvailable);}
Mai mult COD
http://www.info.uaic.ro/~flash 14
Să vedem cine este primul care ne trimite un mesaj