<-[-]-[-]-[E]-[Z]-[K]-[R]-[A]-[C]-[H]-[O]-[ ]-[T]-[E]-[A]-[M]-[-]-[-]->
     > Eko Magazine #04 Post Devaluation, La Odisea del Patacon 2002 <
  <-------- [ El-Ju3z[] #Col ] ----------- [ [email protected] ] --->
            > Jodiendo con Java (Sockets) ...java hacka... <

Ahh.. por fin... este texto me tenia las pelotas por el piso y la verdad es
que entre el trabajo, el estudio y la paj.. estoy hecho un zombie, no puedo
creer que pude terminar esto.

Lo que vamos a ver a continuacion es un mini tutorial de socket Java, orientado
a crear servidores (de irc o lo que se les ocurra) en especial para hacer esos
chat en la web o para hacerce algun tool h4x0r (un java trojan o back door)
Tambien cabe aclarar que este texto es tan original como un cuadro de picasso
asi le cierro la boca a los que dicen que los ezines siempre es lo mismo pero
explicado diferente .. eko es 31337  (jeje soy chupamedias????)

NOTA: este texto esta orientado a gente con conocimientos previos en Java
(minimos) hablando en criollo, este texto es para mal0rs ;) jeje



                            INTRODUCCION
                            ~~~~~~~~~~~~


Java es un lenguaje seguro, multiplataforma y orientado a internet y redes asi
que queda en ustedes el querer o no aprender Java ;)

Java proporciona las clases ServerSocket y Socket los cuales tienen asociado
un port definido por el programador para poder entablar comunicacion con
diferentes servicios y protocolos.
Por ejemplo:

ServerSocket ---> se usa para el servidor
Socket ---------> se usa para el cliente

El socket servidor queda a la escucha de un cliente por medio del metodo
"accept()" el cual permite entablar la comunicacion propiamente dicha.
por ejemplo:

si queremos codear un server que escuche por el puerto 10:

ju3zServer coneccion = new ServerSocket(10); --> ahi esta el puerto

Socket cliente = conexion.accept(); --> para recibir al cliente

ahora el cliente lo que tiene que hacer es conectarse al port 10 y comenzar
a interactuar:
Socket conexion = new Socket (direccion, 10); --> ahi se conecta al server

Una vez establecida la coneccion, las clases y metodos para interactuar son:
la clase "URLConnection" y la clase "Socket" disponen de los metodos:
"getInputStream" y "getOutputStream" que son por donde fluyen los datos.
Tambien les comento que un DataInputStream permite leer datos que llegan a
travez de la red y un DataOutputStream no sirve para enviar datos al host.




                        CREANDO EL PROGRAMA SERVIDOR
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

El siguiente ejemplo necesita de una red local o internet para poder comunicar
con el cliente. (o bien ejecutarlos en la misma maquina)


import java.io.*;
import java.net.*;

Public class Ju3z-server {
public static void main(string argv[]) {
                  ServerSocket servidor;
                  Socket       cliente ;
                  int          NumCliente = 0 ;
                  try {
                       servidor = new ServerSocket (5);
                       do {
                           numCliente++;
                           cliente = servidor.accept();
System.out.println("llego el cliente"+numCliente);
PrintStream ps = new PrintStream
(cliente.getOutputStream());
ps.println("vos sos mi cliente"+numCliente);
cliente.close();
} while (true);
}
catch (Exception e) {
e.printStackTrace();
}
}
}




Bueno, no crean que tienen lagunas mentales y no entendieron nada, porque
ahora voy a explicar detalladamente este despelote:

*PrintStream: lo uso para enviar los datos al cliente
*PrintStream.println: maneja los datos como System.out.println y hay que
indicarle el stream por el cual manda los datos (por OutputStream)
..y lo demas es lo que explique mas arriba (antes del codigo)

Bien, ya se pude decir que con estos minimos conocimientos se pueden armar
algun monitor de conecciones bien cutre o un back door ;) o cualquier
cosa sencilla, pero como muchos de ustedes son elite superstar, vamos a codear
un chat java de esos para usar desde la web para mejorar sus paginas web :)))
(un server mejor dicho)






                 EJEMPLO PRACTICO DE UN JAVA CHAT BIEN COOL
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


NOTA: la parte de clientes la dejo para otra ocasion, ahora vamos a armar
un "server" (ChatProject.java) y el objeto EkoChat.java ;)
en conclusion esto es un programa "server" para ser accedido mediante un
cliente ya sea por un javascript u otro programa java "cliente".



--------------------------- ChatProject.java-------------------------------

public class ChatProject {
public static void main(String argv[]) {
EkoChat servidor =
new ChatServidor(6667);
}
}
// compilar con: "javac ChatProject.java"
---------------------------------------------------------------------------

Ahora solo resta hacer el objeto EkoChat ...


public class EkoChat {
public class EkoChat(int puerto) {
ESTABLECER_CONECCION_SERVIDOR ;
do {
ESPERAR_CLIENTE;
ARRANCAR_THREAD_PARA_CLIENTE;
AGREGAR_CLIENTE_A_LISTA;
} while (true);
public synchronized void sendAll(...) {
for (int i=0; i<CANT_CLIENTES_VIVOS; i++) {
ENVIAR_MENSAJE_AL_THREAD_DEL_CLIENTE_i;
}
}
public void killClient(...) {
SACAR_CLIENTE_DE_LISTA;
MATAR_THREAD_DEL_CLIENTE;
}
}


y por ultimo .. ya me olvidaba jeje tengo que aflojarle a la manito he he ..
falta el thread!! (el que se ejecuta para cada cliente)

.. ahi va el codigo:


-------------------------------- eko.java -------------------------------

public class ekoThread extends Thread {
boolean running;
public ekoThread(referencia al EkoChat, etc..){
ABRIR_STREAM_DE_ENTRADA;
ABRIR_STREAM_DE_SALIDA ;
running = true;
}
public void run() {
while (running) {
ESPERAR_MENSAJE_DE_STREAM_DE_ENTRADA;
(SI SE CORTA LA CONECCION , AVISAR AL EkoChat PARA QUE MATE...!);
PASAR_MENSAJE_AL_EkoServidor;
}
}
public void sendMsg(...) {
ENVIAR_MENSAJE_VIA_STREAM_DE_SALIDA;
}
}
---------------------------------- fin! -----------------------------------

NOTA: para non-programmers je, el thread es una clase basica de Java que
implementa la interfase Runnable y dispone de unos cuantos metodos por
defecto. (para usarlos debemos crearlos como instancias y ponerlos a andar)


CONCLUSIONES: si usas JAVA la comida save mejor y la musica suena mejor,
. jeje y ademas no suckea tanto como otros lenguajes ;)


#chivo: comprenme cuentas shell!! denme de comer!
            community.ezkracho.com.ar/el-ju3z


     > Eko Magazine #04 Post Devaluation, La Odisea del Patacon 2002 <
            > Jodiendo con Java (Sockets) ...java hacka... <
                                 [EOF]