Autor Tema: [Ayuda] Sockets en AS3  (Leído 1247 veces)

Desconectado Nasty35

  • PHPer@
  • **
  • Mensajes: 60
  • Karma: 0
  • Sexo: Masculino
  • Intento aprender
    • Ver Perfil
    • LioMet ~ Tu mejor opción
[Ayuda] Sockets en AS3
« 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:Stringport:int):void
	
	
{
	
	
	
try
	
	
	
{
	
	
	
trace("Sockets iniciados");
	
	
	
cliente = new Socket(hostport); // 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!! :)



<?php
class Phperos {
    
$private name;
    public static function 
setName($name) { self::name $name;  }
	
public static function 
getName() {  return self::name; }
}
Phperos::setName(&#39;Nasty35&#39;);
echo &#39;Soy &#39; . Phperos::getName();
?>

Comunidad PHPeros

[Ayuda] Sockets en AS3
« en: 11 de Julio de 2012, 16:35:50 pm »

Desconectado ilovepixel

  • PHPer@ Fijo
  • ***
  • Mensajes: 149
  • Karma: 9
  • Sexo: Masculino
  • Game Artist & Developer
    • Ver Perfil
    • i ■ pixel
Re:[Ayuda] Sockets en AS3
« Respuesta #1 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.CONNECTonConnect);
	
	
	
socket.addEventListener(Event.CLOSEonClose);
	
	
	
socket.addEventListener(IOErrorEvent.IO_ERRORonIOError);
	
	
	
socket.addEventListener(SecurityErrorEvent.SECURITY_ERRORonSecError);
	
	
	

	
	
	
try
	
	
	
{
	
	
	
	
socket.connect(hostport);//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.CONNECTonConnect);
	
	
	
socket.addEventListener(ProgressEvent.SOCKET_DATAonData);//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.connectedsocket.close();//Cerramos conexión si existe alguna.
	
	
}
	
}

}


Saludos.
« Última modificación: 12 de Julio de 2012, 17:02:59 pm por ilovepixel »

Desconectado Nasty35

  • PHPer@
  • **
  • Mensajes: 60
  • Karma: 0
  • Sexo: Masculino
  • Intento aprender
    • Ver Perfil
    • LioMet ~ Tu mejor opción
Re:[Ayuda] Sockets en AS3
« Respuesta #2 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! :)



<?php
class Phperos {
    
$private name;
    public static function 
setName($name) { self::name $name;  }
	
public static function 
getName() {  return self::name; }
}
Phperos::setName(&#39;Nasty35&#39;);
echo &#39;Soy &#39; . Phperos::getName();
?>