elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 23:46  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  [Sockets] Sirven en internet?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Sockets] Sirven en internet?  (Leído 607 veces)
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
[Sockets] Sirven en internet?
« en: 2 Diciembre 2011, 21:07 »

Hola, estuve viendo unos videotutoriales que me paso un amigo, el tipo se llama nikitus y enseña a crear una conexion con sockets, en el video muestra como hacer un pequeño xat, todo el codigo funka, pero me gustaria saber si es posible hacer que funke en internet, traté de poner mi direccion ip en el programa cliente y pasarselo a un amigo, pero no funciono, codeé en base al video, dos clases, un cliente y un server, en localhost corre bien, pero me gustaría saber, si es posible, que debo cambiarle para que funcione en internet, de antemano gracias.

Clase servidor:

Código
 
import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import javax.swing.JOptionPane;
 
public class XServer {
 
 private ServerSocket ss;
private Socket s;
private ObjectOutputStream oos;
private boolean isRunning=true;
private ObjectInputStream ois;
private volatile Command cmd=null;
 
 
   XServer(){
 
         try{
 
    ss = new ServerSocket(9999);
    s = ss.accept();
    oos=new ObjectOutputStream(s.getOutputStream());
    ois=new ObjectInputStream(s.getInputStream());
 
    }catch(IOException ioex){
 
     ioex.printStackTrace();
 
    }
 
this.sender();
this.receiver();
this.dealReceive();
this.autoClose();
 
   }
 
   void sender(){
 
Thread t=new Thread(new Runnable(){
 
 public void run(){
 
  while(XServer.this.isRunning){
 
   int type=0;
 
   try{
 
 String msg=JOptionPane.showInputDialog("Mensaje para el Cliente");
 
  Command c=new Command();
 
  c.setMsg(msg);
 
  type=(msg.equalsIgnoreCase("Close"))? 0:1;
 
  c.setType(type);
 
  oos.writeObject(c);
 
 }catch(IOException ex) {
 
  ex.printStackTrace();
 
 }
 
   if(type==0){
 
    break;
 
   }
 
  }
 
 }
 
});
 
t.start();
 
   }
 
   void receiver(){
 
   Thread t=new Thread(new Runnable(){
 
    public void run(){
 
     while(XServer.this.isRunning){
 
       try{
 
     Thread.sleep(1000);
 
     Object aux=ois.readObject();
 
     if(aux!=null && aux instanceof Command){
 
       XServer.this.cmd = (Command) aux;
 
     }
 
    }catch(InterruptedException intex){
 
     intex.printStackTrace();
 
    }catch(IOException ioex){
 
     ioex.printStackTrace();
 
    }catch(ClassNotFoundException classex){
 
     classex.printStackTrace();
 
    }
 
     }
 
    }
 
   });
 
   t.start();
 
   }
 
   void dealReceive(){
 
    Thread t=new Thread(new Runnable(){
 
     public void run(){
 
      while(XServer.this.isRunning){
 
      try{
 
       Thread.sleep(1000);
 
       Command c=XServer.this.cmd;
 
       if(c.getType().equals("Message")){
 
        System.out.println(c.getMsg());
 
       }else if(c.getType().equals("Action") && c.getMsg().equals("Close")){
 
        XServer.this.isRunning=false;
 
       }
 
    }catch(InterruptedException intex){
 
     intex.printStackTrace();
 
    }catch(NullPointerException nullex){
 
    }finally{
 
      XServer.this.cmd=null;
 
    }
 
    }
 
     }
 
    });
 
    t.start();
 
   }
 
   void autoClose(){
 
Thread t=new Thread(new Runnable(){
 
 public void run(){
 
  while(true){
 
   try{
 
    Thread.sleep(200);
 
    if(!XServer.this.isRunning){
 
     XServer.this.ois.close();
     XServer.this.oos.close();
     XServer.this.s.close();
 
    }
 
   }catch(InterruptedException intex){
 
    intex.printStackTrace();
 
   }catch(IOException ioex){
 
    ioex.printStackTrace();
 
   }
 
  }
 
 }
 
});
 
t.start();
 
}
 
}
 
 
 

Clase cliente:

Código
 
import java.net.Socket;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import javax.swing.JOptionPane;
 
public class XClient {
 
 private Socket s;
private ObjectOutputStream oos;
private boolean isRunning=true;
private ObjectInputStream ois;
private volatile Command cmd=null;
 
 
   XClient(){
 
              try{
 
    s=new Socket("10.5.4.124", 9999);
    oos=new ObjectOutputStream(s.getOutputStream());
    ois=new ObjectInputStream(s.getInputStream());
 
    }catch(IOException ioex){
 
     ioex.printStackTrace();
 
    }
 
              this.sender();
              this.receiver();
              this.dealReceive();
              this.autoClose();
 
   }
 
   void receiver(){
 
   Thread t=new Thread(new Runnable(){
 
    public void run(){
 
     while(XClient.this.isRunning){
 
       try{
 
     Thread.sleep(1000);
 
     Object aux=ois.readObject();
 
     if(aux!=null && aux instanceof Command){
 
       XClient.this.cmd = (Command) aux;
 
     }
 
    }catch(InterruptedException intex){
 
     intex.printStackTrace();
 
    }catch(IOException ioex){
 
     ioex.printStackTrace();
 
    }catch(ClassNotFoundException classex){
 
     classex.printStackTrace();
 
    }
 
     }
 
    }
 
   });
 
   t.start();
 
   }
 
       void dealReceive(){
 
    Thread t=new Thread(new Runnable(){
 
     public void run(){
 
      while(XClient.this.isRunning){
 
      try{
 
       Thread.sleep(1000);
 
       Command c=XClient.this.cmd;
 
       if(c.getType().equals("Message")){
 
        System.out.println(c.getMsg());
 
       }else if(c.getType().equals("Action") && c.getMsg().equals("Close")){
 
        XClient.this.isRunning=false;
 
       }
 
    }catch(InterruptedException intex){
 
     intex.printStackTrace();
 
    }catch(NullPointerException nullex){
 
    }finally{
 
      XClient.this.cmd=null;
 
    }
 
    }
 
     }
 
    });
 
    t.start();
 
   }
 
void sender(){
 
Thread t=new Thread(new Runnable(){
 
 public void run(){
 
  while(XClient.this.isRunning){
 
   int type=0;
 
   try{
 
 String msg=JOptionPane.showInputDialog("Mensaje para el Server");
 
  Command c=new Command();
 
  c.setMsg(msg);
 
  type=(msg.equalsIgnoreCase("Close"))? 0:1;
 
  c.setType(type);
 
  oos.writeObject(c);
 
 }catch(IOException ex) {
 
  ex.printStackTrace();
 
 }
 
   if(type==0){
 
    break;
 
   }
 
  }
 
 }
 
});
 
t.start();
 
   }
 
void autoClose(){
 
Thread t=new Thread(new Runnable(){
 
 public void run(){
 
  while(true){
 
   try{
 
    Thread.sleep(200);
 
    if(!XClient.this.isRunning){
 
     XClient.this.ois.close();
     XClient.this.oos.close();
     XClient.this.s.close();
 
    }
 
   }catch(InterruptedException intex){
 
    intex.printStackTrace();
 
   }catch(IOException ioex){
 
    ioex.printStackTrace();
 
   }
 
  }
 
 }
 
});
 
t.start();
 
}
 
}
 
 

Se me olvidaba, para lo que quiero hacer despues de aprender a manipular sockets en internet creé una clase comando, que en el futuro me servirá para mandar solo strings con referencias a lo que se debe hacer y no mandar objetos pesados a traves de la conexion, esta es la clase:

Código
 
import java.io.Serializable;
 
public class Command implements Serializable{
 
private String[] types={"Action", "Message", "Dialog", "Input", "Warning", "Error"};
private String[] actions={"Close"};
 
private String type="";
private String msg="";
 
   Command(){
 
    this.type= types[1];
 
   }
 
   Command(String msg){
 
    this.type=this.types[0];
    this.msg=msg;
 
   }
 
   Command(String msg, int type){
 
    this.type=this.types[type];
    this.msg=msg;
 
   }
 
public String getMsg() {
 return msg;
}
 
void setDialog(String msg){
 
 this.msg=msg;
 this.type=types[2];
 
}
 
void setInput(String msg){
 
 this.msg=msg;
 this.type=types[3];
 
}
 
void setWarning(String msg){
 
 this.msg=msg;
 this.type=types[4];
 
}
 
void setError(String msg){
 
 this.msg=msg;
 this.type=types[5];
 
}
 
public void setMsg(String msg) {
 this.msg = msg;
}
 
public void setType(int i){
 
 this.type=this.types[i];
 
}
 
public String getType(){
 
 return this.type;
 
}
 
 
 
}
 
 
 


Bueno, de antemano agradezco muchísimo vuestras respuestas, saludos


En línea

RyogiShiki


Desconectado Desconectado

Mensajes: 708


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #1 en: 2 Diciembre 2011, 22:14 »

No he visto el código, pero las conexiones entre sockets del tipo peer to peer suelen estar bastante liadas si alguno de los dos está detrás de un Firewall o un Router. Si la conexión es directa y no estás usando ningún puerto reservado seguro que va de las mil maravillas.

Saludos


En línea

DonVidela


Desconectado Desconectado

Mensajes: 1.617



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #2 en: 2 Diciembre 2011, 22:16 »

Interesante, gracias por publicar el codigo, voy a revisarlo mas tarde y te cuento, saludos!
En línea

Aprendiendo: Java , C# , pl/sql, mysql , sql server, PHP , Access, JSF, Facelets, JSP, CakePHP, JQuery

http://pablovidela.wordpress.com
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #3 en: 2 Diciembre 2011, 22:27 »

Olvide poner el main, aunque no hace mucho:

Código
 
public class Main {
 
   public static void main(String[] args) {
 
    //xserver();
    //xclient();
 
   }
 
}
 
 

Para probarlo en localhost, primero se conecta como server, luego como client (sacando los respectivos comentarios) y en la linea 22 de XClient el primer argumento es "localhost", esta es mi duda, que debo poner en localhost, por que al hacer ipconfig, me salen un monton de numeros y el amigo que recibio el jar cliente ya no esta conectado Xd (la conexion aqui en mi instituto es ipv6, ¿sera por eso?  ojalá que no :-\)

Saludos!
En línea

DonVidela


Desconectado Desconectado

Mensajes: 1.617



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #4 en: 2 Diciembre 2011, 22:39 »

Si tu eres el servidor coloca tu ip

http://whatismyipaddress.com/

ahi la ves, y el cliente colocara su propia ip,  :xD cualquier error alguien me corrige, saludos.
En línea

Aprendiendo: Java , C# , pl/sql, mysql , sql server, PHP , Access, JSF, Facelets, JSP, CakePHP, JQuery

http://pablovidela.wordpress.com
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #5 en: 2 Diciembre 2011, 23:16 »

Puse la ip que sale en es pagina, el chico al que le pedi que ejecutara el cliente me dijo lo siguiente:

"ahora si abrio algo­­ y dije hola­­"

No se si creerle, pero si es cierto algo anda mal en mi code, si es mentira quizas sea algo mas que haya que hacer.

En línea

DonVidela


Desconectado Desconectado

Mensajes: 1.617



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #6 en: 2 Diciembre 2011, 23:48 »

Puse la ip que sale en es pagina, el chico al que le pedi que ejecutara el cliente me dijo lo siguiente:

"ahora si abrio algo­­ y dije hola­­"

No se si creerle, pero si es cierto algo anda mal en mi code, si es mentira quizas sea algo mas que haya que hacer.



Y por que crees que te mintio?
En línea

Aprendiendo: Java , C# , pl/sql, mysql , sql server, PHP , Access, JSF, Facelets, JSP, CakePHP, JQuery

http://pablovidela.wordpress.com
egyware


Desconectado Desconectado

Mensajes: 436


GameDeveloper


Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #7 en: 4 Diciembre 2011, 04:58 »

Cuando uno está detras de un Router es imposible abrir puertos. Si estás detras de un router o firewall o lo que sea, trata de desbloquearlo primero y luego te pones a la escucha en tales puertos.
Si estas directamente conectado a internet no deberias tener problemas en ponerte a la escucha en ningun puerto (cuidado con el firewall)

Saludos!!!
En línea

Chivin

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [Sockets] Sirven en internet?
« Respuesta #8 en: 4 Diciembre 2011, 06:50 »

Ola como mencionan los compañeros, los más seguro es que estas tras un firewall o un router quien(es) probablemente (por no afirmarlo) tiene cerrado el puerto que estas utilizando. Es por ello que no permite la comunicación, para hacer la conexión es necesario el pase por esas barreras de lo contrario jamás se conectarán. El problema no tiene que ver con IPv6.

saludos!!
En línea
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #9 en: 4 Diciembre 2011, 18:22 »

No-Ip sirve?
En línea

egyware


Desconectado Desconectado

Mensajes: 436


GameDeveloper


Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #10 en: 4 Diciembre 2011, 18:26 »

No-Ip sirve?
Siempre y cuando desbloquees los puertos o cualquier cosa que te bloquee.
SI
En línea

klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [Sockets] Sirven en internet?
« Respuesta #11 en: 4 Diciembre 2011, 20:27 »

Digamos que tengo un router (no se como se llamara esta cosita cuadrada que da internet) o un firewall, que debo hacer?, como se que puertos pueden utilizarse para comunicar los sockets?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Que repositorios me sirven?
GNU/Linux
comapalta 5 557 Último mensaje 7 Junio 2006, 20:57
por _R€d_
No me sirven las paginas .tk
Dudas Generales
andavid 3 522 Último mensaje 16 Julio 2006, 06:38
por Kase
Ya no sirven los seriales de oro???
Windows
djtopo18 4 834 Último mensaje 26 Septiembre 2008, 16:29
por seba123neo
Athero con USB, sirven?
Hacking Wireless
Belial & Grimoire 1 533 Último mensaje 29 Diciembre 2010, 10:03
por ChimoC
Liado con Sockets, Streams.. y ficheros de internet
.NET
xuturk 2 452 Último mensaje 1 Septiembre 2011, 08:58
por xuturk
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines