Autor
|
Tema: [Sockets] Sirven en internet? (Leído 6,081 veces)
|
|
klaine
|
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: 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 boolean isRunning=true; private volatile Command cmd=null; XServer(){ try{ s = ss.accept(); ioex.printStackTrace(); } this.sender(); this.receiver(); this.dealReceive(); this.autoClose(); } void sender(){ public void run(){ while(XServer.this.isRunning){ int type=0; try{ Command c=new Command(); c.setMsg(msg); type=(msg.equalsIgnoreCase("Close"))? 0:1; c.setType(type); oos.writeObject(c); ex.printStackTrace(); } if(type==0){ break; } } } }); t.start(); } void receiver(){ public void run(){ while(XServer.this.isRunning){ try{ if(aux!=null && aux instanceof Command){ XServer.this.cmd = (Command) aux; } intex.printStackTrace(); ioex.printStackTrace(); classex.printStackTrace(); } } } }); t.start(); } void dealReceive(){ public void run(){ while(XServer.this.isRunning){ try{ 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; } intex.printStackTrace(); }finally{ XServer.this.cmd=null; } } } }); t.start(); } void autoClose(){ public void run(){ while(true){ try{ if(!XServer.this.isRunning){ XServer.this.ois.close(); XServer.this.oos.close(); XServer.this.s.close(); } intex.printStackTrace(); ioex.printStackTrace(); } } } }); t.start(); } }
Clase cliente: import java.net.Socket; import java.io.ObjectOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import javax.swing.JOptionPane; public class XClient { private boolean isRunning=true; private volatile Command cmd=null; XClient(){ try{ s =new Socket("10.5.4.124", 9999); ioex.printStackTrace(); } this.sender(); this.receiver(); this.dealReceive(); this.autoClose(); } void receiver(){ public void run(){ while(XClient.this.isRunning){ try{ if(aux!=null && aux instanceof Command){ XClient.this.cmd = (Command) aux; } intex.printStackTrace(); ioex.printStackTrace(); classex.printStackTrace(); } } } }); t.start(); } void dealReceive(){ public void run(){ while(XClient.this.isRunning){ try{ 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; } intex.printStackTrace(); }finally{ XClient.this.cmd=null; } } } }); t.start(); } void sender(){ public void run(){ while(XClient.this.isRunning){ int type=0; try{ Command c=new Command(); c.setMsg(msg); type=(msg.equalsIgnoreCase("Close"))? 0:1; c.setType(type); oos.writeObject(c); ex.printStackTrace(); } if(type==0){ break; } } } }); t.start(); } void autoClose(){ public void run(){ while(true){ try{ if(!XClient.this.isRunning){ XClient.this.ois.close(); XClient.this.oos.close(); XClient.this.s.close(); } intex.printStackTrace(); 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: import java.io.Serializable; private String[] types ={"Action", "Message", "Dialog", "Input", "Warning", "Error"}; private String[] actions ={"Close"}; Command(){ this.type= types[1]; } this.type=this.types[0]; this.msg=msg; } Command (String msg, int type ){ this.type=this.types[type]; this.msg=msg; } return msg; } this.msg=msg; this.type=types[2]; } this.msg=msg; this.type=types[3]; } this.msg=msg; this.type=types[4]; } 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]; } return this.type; } }
Bueno, de antemano agradezco muchísimo vuestras respuestas, saludos
|
|
|
|
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
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
|
|
|
|
|
Pablo Videla
|
Interesante, gracias por publicar el codigo, voy a revisarlo mas tarde y te cuento, saludos!
|
|
|
|
|
En línea
|
|
|
|
|
klaine
|
Olvide poner el main, aunque no hace mucho: 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
|
|
|
|
|
|
|
klaine
|
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
|
|
|
|
|
Pablo Videla
|
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
|
|
|
|
|
egyware
|
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
Mensajes: 4
|
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
|
|
|
|
|
|
|
| Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
firmware!!! ¿para que sirven?
Software
|
aliteroid
|
1
|
3,773
|
10 Abril 2006, 17:21 pm
por el-brujo
|
|
|
para que sirven los puos en en un dvd?
Multimedia
|
druguito
|
1
|
2,427
|
13 Julio 2006, 09:58 am
por CHI<`;´>NO©
|
|
|
Athero con USB, sirven?
Hacking Wireless
|
Belial & Grimoire
|
1
|
2,495
|
29 Diciembre 2010, 10:03 am
por ChimoC
|
|
|
Liado con Sockets, Streams.. y ficheros de internet
.NET (C#, VB.NET, ASP)
|
xuturk
|
2
|
2,903
|
1 Septiembre 2011, 08:58 am
por xuturk
|
|
|
Sockets a través de internet C#
.NET (C#, VB.NET, ASP)
|
Bob1098
|
3
|
2,854
|
16 Agosto 2015, 15:20 pm
por Bob1098
|
|