Foro de elhacker.

net
Programación => .NET => Mensaje iniciado por: Xx-Zerooh-xX
en 19 Enero 2015, 15:11

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
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.

-Otra ves llamo a AcceptTcpClient().. 22.InterNetwork. Servidor inicia un TcpListener en un determinado puerto y esta a la escucha de las peticiones del cliente usando el metodo "AcceptTcpClient()".Bind(localEndPoint). 11. 2-. yo usaria 2 clases una que es la que escucha en determinado puerto(Servidor.Listen(100). // Crear un TCP/IP socket."). 19. listener. { 13. .::IT::. 3-. } 25. ProtocolType. 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()).7. public static IPEndPoint localEndPoint = new IPEndPoint(ipAddress. Puerto). en 20 Enero 2015.conexion entre Servidor y cliente AS2 o SWF Publicado por: .cs). 06:39 Ummm espero que esto de ayude para comenzar yo usaria un TcpListener en lugar de socket. y otra que procesa(Procesar. 18.GetHostEntry(IP). 23. 15. SocketType. El funcionamiento seria : 1-. listener..Teniendo mi objeto "Procesar" creo un nuevo Thread(proceso) en el cual invoco a un metodo al que llamaria "process" 4.Stream. 14.Tcp). 10.AddressList[0]. ColorConsola. 24. public static IPAddress ipAddress = Dns. 21. public static Socket listener = new Socket(AddressFamily. 16. 9.Info("Esperando conexiones entrantes. 20. // Enlazando el socket a el punto de encuentro y escuchar las conexiones entrantes 17. } Título: Re: [Ayuda] C# Recibir y enviar paquetes.cs). public static void EscucharCliente() 12. 8.

process)). t.//para escribir la respuesta . listener. private int puerto = 8069. { 3.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.AcceptTcpClient(). 10. y se repite el proceso 18. { 14. TcpListener listener. 5. 11. } Aqui el codigo de la clase Procesar. class Procesar() TcpClient c. { 8. Thread t = new Thread(new ThreadStart(p.//Listo es todo nuevamente regresa a s = listener.cs Código 1. listener = new TcpListener(IPAndress.puerto). public 2.AcceptTcpClient().Any.Start(). 6. public void listen() 7. } 20.//para leer los datos del cliente StreamWriter output.Start(). 5. { 3.//Aqui ya recibi una peticion 16. Procesar p = new Procesar(s). 4. // aqui la proceso en un nuevo Thread 17. TcpClient s = listener. } 19.//En este punto el programa esta detenido esperando al cliente 15. 9. //Comiensa el ciclo repetitivo para aceptar peticiones 12. //El puerto en el que corre 4. Stream input. while(true) 13.Lo que lo hace multiusuario es que cada peticon se procesa en un Thread diferente eso es todo aqui un ejemplo: Servidor. 6.

15. c.Start(). } 22. output = new StreamWriter(new BufferedStream(c. 16. 11. 9.7.GetStream()). 13. 8.Flush().//invocamos al metodo Flush del output 20. //Aqui el codigo para procesar input 17. public Procesar(TcpClient socket) { this. 10. .GetStream())). 19.//cerramos el TcpClient 21.close(). 12. 14. output. Por ultimo usamos nuestra clase servidor en nuestro metodo principal con Servidor myServer=new Servidor() myServer. } Bueno esa es la extructura basica con la que yo trabajaria aunque e visto otras formas pero que no me convecieron mucho.c= socket. //la respuesta la enviamos escribiendo en output usando Write o WriteLine 18. } public void process() { input = new BufferedStream(c.