Está en la página 1de 4

Foro de elhacker.

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

Ttulo: [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 mltiples 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 ensearan como hacer lo que
les pido, Muchas Gracias. Cualquier cosa comenten por favor.
Cdigo
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. }

Ttulo: Re: [Ayuda] C# Recibir y enviar


paquetes,conexion entre Servidor y cliente AS2 o SWF
Publicado por: .::IT::. en 20 Enero 2015, 06:39
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)
Cdigo
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


Cdigo
1. public
2. {
3.
4.
5.
6.

class Procesar()
TcpClient c;
Stream input;//para leer los datos del cliente
StreamWriter output;//para escribir la respuesta

7.
8.
9.
10.
11.
12.
13.
14.
15.

public Procesar(TcpClient socket)


{
this.c= socket;
}
public void process()
{

input = new BufferedStream(c.GetStream());


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();