Foro de elhacker.net

Programación => Java => Mensaje iniciado por: m@o_614 en 1 Marzo 2015, 03:10 am



Título: sockets
Publicado por: m@o_614 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???


Título: Re: sockets
Publicado por: Usuario Invitado 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.


Título: Re: sockets
Publicado por: m@o_614 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


Título: Re: sockets
Publicado por: Usuario Invitado en 3 Marzo 2015, 04:09 am
Sí, a simple vista me parece correcto.