elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  sockets
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sockets  (Leído 1,769 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
sockets
« en: 1 Marzo 2015, 03:10 am »

Saludos

Estoy empezando a estudiar sobre los sockets. Tengo este programa sencillo que me pasaron para estudiarlo, una clase se llama Emisor y la otra Receptor. Ya he estado leyendo sobre la clase DatagramPacket y DatagramSocket. La duda que tengo es si el codigo se puede realizar sin necesidad de tener dos archivos .java, y si se puede poner todo en un solo proyecto.

Código
  1. import java.net.DatagramSocket;
  2. import java.net.DatagramPacket;
  3. import java.net.SocketException;
  4. import java.net.InetAddress;
  5. import java.net.UnknownHostException;
  6. import java.io.IOException;
  7. public class Emisor{
  8. public static void main(String args[]){
  9. DatagramSocket socketEmision;
  10. String ip=args[0];
  11. String mensaje=args[1];
  12. //int puertoSalida=2002;
  13. byte[] buffer;
  14. //System.out.print("Iniciando socket emision en puerto "+puertoSalida+"...");
  15. try{
  16. socketEmision=new DatagramSocket();  //constructor sobrecargado para recibir o no un #puerto
  17. System.out.println("hecho");
  18. buffer=mensaje.getBytes();
  19. dp=new DatagramPacket(buffer,buffer.length,InetAddress.getByName(ip),2001);
  20. socketEmision.send(dp);
  21. System.out.print("Cerrando socket emision...");
  22. socketEmision.close();
  23. System.out.println("hecho");
  24. }catch(SocketException e){
  25. System.out.println("Error iniciando socket: "+e.getMessage());
  26. System.out.println("UnknownHostException: "+e.getMessage());
  27. }catch(IOException e){
  28. System.out.println("IOException: "+e.getMessage());
  29. }
  30. }
  31. }

y el otro es:

Código
  1. import java.net.DatagramSocket;
  2. import java.net.DatagramPacket;
  3. import java.net.SocketException;
  4. import java.io.IOException;
  5. public class Receptor{
  6. public static void main(String args[]){
  7. DatagramSocket socketRecepcion;
  8. int puertoEntrada=2001;
  9. byte[] buffer=new byte[1024];
  10. System.out.print("Iniciando socket recepcion en puerto "+puertoEntrada+"...");
  11. try{
  12. socketRecepcion=new DatagramSocket(puertoEntrada);
  13. System.out.println("hecho");
  14. dp=new DatagramPacket(buffer,buffer.length);
  15. while(true){//deseable validar con bandera
  16. socketRecepcion.receive(dp);
  17. System.out.print("IP emisora: "+dp.getAddress().toString()+":");
  18. System.out.println(new String(buffer,0,dp.getLength()));
  19. }
  20. //socketRecepcion.close();//código inalcanzable sin bandera
  21. }catch(SocketException e){
  22. System.out.println("Error iniciando socket: "+e.getMessage());
  23. }catch(IOException e){
  24. System.out.println("IOException: "+e.getMessage());
  25. }
  26. System.out.print("Cerrando socket recepcion...");
  27. System.out.println("hecho");
  28. }
  29. }

es estrictamente necesario tener dos archivos???


En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: sockets
« Respuesta #1 en: 1 Marzo 2015, 03:42 am »

Claro que si. El objetivo de trabajar con Sockets comunicar un cliente con un servidor remotamente.

Para pruebas puedes tener el server y el client en el mismo proyecto. Ambas serán dos clases que contengan el método main. Solo corre primero el server y luego el client.

También puedes instanciar el server y el client en un mismo main. Pero no es práctico.


En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: sockets
« Respuesta #2 en: 3 Marzo 2015, 02:23 am »

muchas gracias Gus Garsaky por tu respuesta, otra duda, si yo tengo aparte de la clase Emisor y Receptor otra clase en la que tengo dos atributos y esos atributos se los quiero pasar a la clase Emisor, seria algo como esto???

Código
  1. import java.net.DatagramSocket;
  2. import java.net.DatagramPacket;
  3. import java.net.SocketException;
  4. import java.net.InetAddress;
  5. import java.net.UnknownHostException;
  6. import java.io.IOException;
  7. import javax.swing.*;
  8.  
  9. public class Emisor {
  10. DatagramSocket emisionSocket;
  11. DatagramPacket paquete;
  12. String IP;
  13. byte[] mensaje;
  14.  
  15. Emisor(JTextField campoMensaje,JTextField campoIP){
  16. mensaje = campoMensaje.getText().getBytes();
  17. IP = campoIP.getText();
  18. }
  19.  
  20. public void main() {
  21. try
  22. {
  23. emisionSocket = new DatagramSocket();
  24. paquete = new DatagramPacket(mensaje,mensaje.length,InetAddress.getByName(IP),2001);
  25. emisionSocket.send(paquete);
  26. emisionSocket.close();
  27. }
  28. catch(SocketException e){
  29. e.getMessage();
  30. }
  31. e.getMessage();
  32. }
  33. catch(IOException e){
  34. e.getMessage();
  35. }
  36. }
  37.  
  38. }
  39.  

de antemano gracias
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: sockets
« Respuesta #3 en: 3 Marzo 2015, 04:09 am »

Sí, a simple vista me parece correcto.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines