Comunidad PHPeros

Lenguajes => Flash y ActionScript => Mensaje iniciado por: Nasty35 en 11 de Julio de 2012, 16:35:50 pm

Título: [Ayuda] Sockets en AS3
Publicado por: Nasty35 en 11 de Julio de 2012, 16:35:50 pm
Miren tengo este cliente de sockets en as3:
package socket
{
import flash.net.Socket;
import flash.errors.IOError;

/**
* ...
* @author Daniel
*/
public class Conection
{
public static var cliente:Socket;
public static var cadena:String;

public static function Init(host:String, port:int):void
{
try
{
trace("Sockets iniciados");
cliente = new Socket(host, port); // Iniciamos los sockets (Cliente)
trace("Conectado a [" + host + ":" + port + "]"); // Mostramos a donde estamos conectados}
cliente.writeUTFBytes("mensaje enviado desde el cliente");
cliente.flush();
trace("Mensaje enviado");
            }
catch (e:IOError)
{
trace(e);
}
}

}

}
y este servidor en java:
package socket;

import java.net.Socket;
import java.net.ServerSocket;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Conection {

public static ServerSocket server;
public static Socket socket;
public static DataOutputStream add;
public static String mr;
public static BufferedReader br;


public void Init(int port) {
try
{
    System.out.println("Esperando clientes");
    // Init connection
server = new ServerSocket(port); // Iniciamos los sockets (servidor)
socket = server.accept(); // Aceptamos la conexión del cliente
// Manage connection
System.out.println("Se conectó un cliente al servidor");
        ///add = new DataOutputStream(socket.getOutputStream()); // Creando instancia para enviar paquetes al cliente
        ///add.writeUTF("Bienvenido!"); // Se envía el dato tipo "string" al cliente
add = new DataOutputStream(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    mr = br.readLine();
System.out.println("El cliente envió un mensaje: " + mr);


// Close connection
br.close();
        add.close(); // Cerramos la instancia que envia paquetes
        socket.close(); // Cerramos la conexión con el cliente
        server.close(); // Cerramos el servidor de sockets
        System.out.println("Sockets cerrados");
} catch (Exception e) {
e.printStackTrace();
}
}
}

Entonces la línea 22 del cliente de as3, no me lo envía:
cliente.writeUTFBytes("mensaje enviado desde el cliente");
No lo envía hasta que cierro el cliente y lo envía.

También quisiera saber como hacer un readUTF en el cliente para leer paquetes enviados desde el servidor.
O algún tutorial o alguien que sepa expliquen.

Gracias y ayudame!! :)
Título: Re:[Ayuda] Sockets en AS3
Publicado por: ilovepixel en 12 de Julio de 2012, 16:56:51 pm
El problema es que as3 requiere de eventos y funciones  que manejen esos eventos.
acá va un ejemplo:


package 
{
/**
* ...
* @author Felipe Alfonso
*/

import flash.display.Sprite;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.Socket;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.system.Security;

[SWF(width="640",height="480",backgroundColor="#000000")]
public class Main extends Sprite
{
public var socket:Socket;
public var host:String;
public var port:int;

public function Main()
{
host = "tuhost";//tu host
port = 123456;//tu puerto
Security.loadPolicyFile("xmlsocket://"+host+":"+port);//Para evitar problemas de seguridad cuando probemos en una web.
socket = new Socket();

//Eventos que hay que escuchar.
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecError);

try
{
socket.connect(host, port);//Intentamos conectar
}
catch(e:Error)
{
trace("No se pudo conectar. Error: " + e.message);//Si no conecta nos tira un mensaje de error.
}
}

public function onSecError(e:SecurityErrorEvent):void
{
trace("No hay conexión. Error: " + e.text);//Por si existe un error de seguridad.
}

public function onConnect(e:Event):void
{
//Esto significa que el claiente a logrado conectarse al servidor.
socket.removeEventListener(Event.CONNECT, onConnect);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);//Comenzamos a escuchar evento de transmición de datos.
trace("Cliente conectado a "+host+":"+port);
}

public function onClose(e:Event):void
{
socket.close();//Por si se cancela la conexión.
trace("Conexión perdida");
}

public function onIOError(e:IOErrorEvent):void
{
socket.close();
trace("No hay conexión. Error: " + e.text);//Por si existe un error de Output o Input.
}

public function onData(e:ProgressEvent):void
{
var msg:String = socket.readUTFBytes(socket.bytesAvailable);//Leemos nuestro dato si el evento es llamado.
trace(msg);//lo imprimimos en la consola.
}

public function send(msg:String):void
{
if (socket.connected)//Verificamos si esta conectado el socket.
{
socket.writeUTFBytes(msg);//Enviamos mensaje.
socket.flush();//Sirve para "tirar" todo dato acumulado en buffer.
}
}

public function exit():void
{
if (socket.connected) socket.close();//Cerramos conexión si existe alguna.
}
}

}


Saludos.
Título: Re:[Ayuda] Sockets en AS3
Publicado por: Nasty35 en 13 de Julio de 2012, 16:22:52 pm
El problema es que as3 requiere de eventos y funciones  que manejen esos eventos.
acá va un ejemplo:

Saludos.
@ilovepixel Muchas gracias, ten en cuenta que soy principiante y no sabía esto :P
Te ganaste un karma mio.

Eres grande! :)