Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Xx-Zerooh-xX en 19 Enero 2015, 15:11 pm



Título: [Ayuda] C# Recibir y enviar paquetes,conexion entre Servidor y cliente AS2 o SWF
Publicado por: Xx-Zerooh-xX en 19 Enero 2015, 15:11 pm
Hola, me gustaria que me hecharan una mano en esto, llevo 3 dias tratando con esto de los socket en c# lamentablemente google no me ha brindado mucha informacion.

Empece este emulador hace algunos dias, lo que quiero hacer es que múltiples clientes se conecten al servidor, encontré como hacerlo buscando y buscando por google.

Con este codigo, el servidor escucha al cliente, ya lo probé y el cliente que esta hecho en adobe flash, al ingresar los datos del login queda esperando a recibir una respuesta y si cierro el emulador, en el cliente aparece "Conexion interrumpida con el servidor" ¿Quieres volver a intentar conectarte al juego?.

Con un Sniffer o husmeador de trafico de red, Analice los paquetes que se envian, y son dos paquetes : "[Af][DatosDeLaCuenta]" y [Ax][NoRecuerdoDeQueEraXD] pero el que importa es el AF.

Lo que quiero lograr es que el emulador analice si se recibe el paquete AF y envie el paquete [AlEc][DarAccesoALaCuentaIngresada] y lograr pasar de la pantalla login.

Aqui les dejo el codigo que escucha al cliente, me falta el para analizar y me gustaria que me enseñaran como hacer lo que les pido, Muchas Gracias. Cualquier cosa comenten por favor.
Código
  1. public class GestorEntrada
  2.    {
  3.        //En estas variables esta almacenado los datos del servidor que pregunta a un archivo de texto cual es la ip y el puerto de entrada
  4.        public static string IP = Ajustes.IP_SERVIDOR;
  5.        public static int Puerto = Ajustes.RealmPort;
  6.  
  7.        public static IPAddress ipAddress = Dns.GetHostEntry(IP).AddressList[0];
  8.        public static IPEndPoint localEndPoint = new IPEndPoint(ipAddress, Puerto);
  9.        public static Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  10.  
  11.        public static void EscucharCliente()
  12.        {
  13.  
  14.            // Crear un TCP/IP socket.
  15.  
  16.            // Enlazando el socket a el punto de encuentro y escuchar las conexiones entrantes
  17.            listener.Bind(localEndPoint);
  18.            listener.Listen(100);
  19.  
  20.  
  21.            ColorConsola.Info("Esperando conexiones entrantes...");
  22.  
  23.  
  24.        }
  25. }


Título: Re: [Ayuda] C# Recibir y enviar paquetes,conexion entre Servidor y cliente AS2 o SWF
Publicado por: .::IT::. en 20 Enero 2015, 06:39 am
Ummm espero que esto de ayude para comenzar yo usaria un TcpListener en lugar de socket, yo usaria 2 clases una que es la que escucha en determinado puerto(Servidor.cs), y otra que procesa(Procesar.cs).
El funcionamiento seria :
1-. Servidor inicia un TcpListener en un determinado puerto y esta a la escucha de las peticiones del cliente usando el metodo "AcceptTcpClient()".
2-. Recibe la peticon del cliente y crea una instancia de la clase Procesar(new Procesar(datoscliente)) que tiene como parametro un odjecto TcpClient(el que es creado usando AcceptTcpClient()).
3-.Teniendo mi objeto "Procesar" creo un nuevo Thread(proceso) en el cual invoco a un metodo al que llamaria "process"
4.-Otra ves llamo a AcceptTcpClient().

Lo que lo hace multiusuario es que cada peticon se procesa en un Thread diferente eso es todo aqui un ejemplo:

Servidor.cs(Escrito directamente aqui en la ventana de posteo no se si compile pero te dara una idea)

Código
  1. public class Servidor
  2. {
  3.      private int puerto = 8069; //El puerto en el que corre
  4.      TcpListener listener;
  5.  
  6.      public void listen()
  7.      {
  8.          listener = new TcpListener(IPAndress.Any,puerto);
  9.          listener.Start();
  10.  
  11.          //Comiensa el ciclo repetitivo para aceptar peticiones
  12.          while(true)
  13.         {
  14.              TcpClient s = listener.AcceptTcpClient();//En este punto el programa esta detenido esperando al cliente
  15.              Procesar p = new Procesar(s);//Aqui ya recibi una peticion
  16.              Thread t = new Thread(new ThreadStart(p.process)); // aqui la proceso en un nuevo Thread
  17.             t.Start();//Listo es todo nuevamente regresa a s = listener.AcceptTcpClient(); y se repite el proceso
  18.         }
  19.      }
  20. }

Aqui el codigo de la clase Procesar.cs

Código
  1. public class Procesar()
  2. {
  3.       TcpClient c;
  4.       Stream input;//para leer los datos del cliente
  5.       StreamWriter output;//para escribir la respuesta
  6.  
  7.       public Procesar(TcpClient socket)
  8.       {
  9.             this.c= socket;
  10.       }
  11.  
  12.       public void process()
  13.      {
  14.             input = new BufferedStream(c.GetStream());
  15.             output = new StreamWriter(new BufferedStream(c.GetStream()));
  16.             //Aqui el codigo para procesar input
  17.             //la respuesta la enviamos escribiendo en  output usando Write o WriteLine
  18.  
  19.             output.Flush();//invocamos al metodo Flush del output
  20.             c.close();//cerramos el TcpClient
  21.      }
  22. }

Bueno esa es la extructura basica con la que yo trabajaria aunque e visto otras formas pero que no me convecieron mucho.

Por ultimo usamos nuestra clase servidor en nuestro metodo principal con

Servidor myServer=new Servidor()
myServer.Start();