Foros del Web » Programación para mayores de 30 ;) » Java »

UDP Servidor-Cliente

Estas en el tema de UDP Servidor-Cliente en el foro de Java en Foros del Web. Hola tengo que hacer un proyecto de un servidor y cliente que manden y reciban paquetes udp, el problema es que no tengo ni idea ...
  #1 (permalink)  
Antiguo 29/03/2009, 16:12
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
UDP Servidor-Cliente

Hola tengo que hacer un proyecto de un servidor y cliente que manden y reciban paquetes udp, el problema es que no tengo ni idea de como se hace, lo que es por tcp si lo he hecho pero por udp ni idea, y por mas que mire en internet, no entiendo nada, me podrían explicar algo de esto con algun ejemplo ó diciendome algun sitio donde me puedan explicar?.

Si pueden pasenme un manualillo, si no es mucha molestia

Gracias de antemano
  #2 (permalink)  
Antiguo 30/03/2009, 01:22
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: UDP Servidor-Cliente

Hola, es casi igual, solo que es un DatagramSocket en vez de un serverSocket:


Código:

		try{

			IPcliente = InetAddress.getByName(IP);
			socket = new DatagramSocket(puerto); 
			dato = new DatagramPacket(paquete, paquete.length, IPcliente , 1024);
			socket.send(dato);	
			socket.close();
		} catch (java.net.SocketException e){
			e.printStackTrace();
			logger.warning("Error en SocketException");
		}catch (java.net.UnknownHostException e){
			logger.warning("Error en UnkownHostException");
		}catch (java.io.IOException e){
			logger.warning("error en IOException");
		}
		logger.info("se ha enviado el texto");

Donde paquete es un array de bytes. Mira en javaSun a ver si hay algún otro envío de datos si no te gustan los bytes, no me acuerdo bien.

Saludos
  #3 (permalink)  
Antiguo 30/03/2009, 08:43
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: UDP Servidor-Cliente

Ya tengo mas o menos montado el servidor y el cliente.

Pero me da un problema al conectarse el cliente al socket del servidor. No entiendo por que da ese problema, (ya he dicho antes que es la primera vez que hago udp)

Aqui os paso mi codigo del servidor y del cliente

SERVIDOR

Código:
public class Servidor {

    public static int puertoServidor=998;
    public static int puertoCliente=999;
    public static int tamanoBuffer=4;
    public static DatagramSocket ds;
    public static byte buffer[] = new byte[tamanoBuffer];
    /**
     * @param args the command line arguments
     */
public static void main(String[] args) 
{
    
    //-----------------------SERVIDOR------------------------
    try {       
           ds = new DatagramSocket(puertoServidor);
           System.out.println("Servidor Activo");
           
                            
           {
               while(true)
           
                   { 
                    DatagramPacket p = new DatagramPacket(buffer, buffer.length);
                      if(ds.isConnected())
                      {
                             ds.receive(p);//recibe el paquete
                             System.out.println("Ha llegado una peticion \n");
                             System.out.println("Procedente de :" + p.getAddress());
                             System.out.println("En el puerto :" + p.getPort());
                             System.out.println("Sirviendo la petición");
                      }
                 }
           }
        }
  
        catch(SocketException e)
        {
            System.out.println("Se ha producido error en el socket");
        }
        catch (UnknownHostException e)
        {
            System.out.println("Error host desconocido");
        }
        catch(IOException e){
            System.out.println("Error en la I/O");
        }
}
}


CLIENTE

Código:
public class Cliente {

    /**
     * @param args the command line arguments
     */
//    public static int puertoServidor=998;
    public static int puertoCliente=999;
    public static int tamanoBuffer=4;
    public static DatagramSocket socket;
    public static byte buffer[] = new byte[tamanoBuffer];
    //public static InetAddress IPServidor;
    public static DatagramPacket datos;
    public static void main(String[] args) throws SocketException, UnknownHostException, IOException 
    {
       try{
           
       
            
             socket = new DatagramSocket(puertoCliente); 
             socket.connect(socket.getInetAddress(), puertoCliente);
             System.out.println("cliente Activo");
             
             if(socket.isConnected())
             {
                         while (true) 
                     {

                      datos = new DatagramPacket(buffer, buffer.length, datos.getAddress() , puertoCliente);
                      System.out.println("-----ENVIANDO DATOS-------\n");
                      socket.send(datos);	
                      System.out.println("-----PAQUETE ENVIADO------\n");

                      }
             }
             else
             {
                 System.out.println("El cliente no esta conectado");
                 socket.close();
             }
       }      
       catch(SocketException e)
        {
            System.out.println("Se ha producido error en el socket");
        }
        catch (UnknownHostException e)
        {
            System.out.println("Error host desconocido");
        }
        catch(IOException e){
            System.out.println("Error en la I/O");
        }
 }
}
en la linea que he puesto en negrita es en la que me peta el programa, debe ser por que no coge la ip del servidor y entonces no se puede conectar a el. De momento quiero hacer esto localhost, no se si habrá otro metodo para conectarse o que cosa.

No se aver si me podeis dar una idea de como arreglarlo

PD:Gracias cucuru , me ha servidor bastante lo que me has explicado
------------------------------------------------------------------------------------------


EDITO: YA HE SOLUCIONADO LO DE LA IP, SOLO HE PUESTO getlocaladdress(), pero ahora falla por otra cosa T_T algo que hay nulo cuando creo el paquete en el cliente.

Última edición por Juny18; 30/03/2009 a las 08:53
  #4 (permalink)  
Antiguo 30/03/2009, 09:18
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: UDP Servidor-Cliente

Hola, desde el cliente no hace falta que te conectes a nada, es UDP (no orientado a conexión) simplemente envías y recibes cosas.

Código:
socket = new DatagramSocket();
datagrama = new DatagramPacket (msg, msg.length, ipServidor,puertoServidor);
socket.send(datagrama);
Así envías.

Lo de crear el paquete, por ejemplo puedes hacerlo así:

Código:
String prueba = "HOLA";
byte msg = new byte[4];
msg = prueba.getBytes();

Saludos

Última edición por cucuru; 30/03/2009 a las 09:31
  #5 (permalink)  
Antiguo 31/03/2009, 01:59
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: UDP Servidor-Cliente

Vale ya me envía y recibe pero solo si pongo en el cliente esto (lo de negrita)

Código:
 socket = new DatagramSocket(); 
            
             System.out.println("cliente Activo");
             
           
                 
                         while (true) 
                     {
                    
                      datos = new DatagramPacket(buffer,4, InetAddress.getLocalHost(),puertoServidor);
                      System.out.println("-----ENVIANDO DATOS-------\n");
                      socket.send(datos);	
                      System.out.println("-----PAQUETE ENVIADO------\n");

                      }
esto lo hace desde localhost, pero ¿Y si yo lo quiero hacer desde un ordenador de la red diferente al localhost?,no se si me explico, es decir , el cliente es de lógica que no va a estar en la misma máquina que el servidor, por eso ¿hay algun metodo que poniendo la ip (no el nombre del servidor) haga el envío UDP?

Proble con InetAddres.getbyname("127.0.0.1") (o incluso declarando una variable llamada host y poniendola ahí, y no funciona.Esto si funciona poniendo "localhost" directamente.

Como he dicho la gracia del programa es que funcione mediante ips. He probado a usar la ip del socket también para ver si funciona, pero nada.


¿Alguna solución o ayudita? XD
  #6 (permalink)  
Antiguo 31/03/2009, 02:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 2 meses
Puntos: 17
Respuesta: UDP Servidor-Cliente

Utilizando InetAddress:

Código:
InetAddress destino = InetAddress.getByName("http:blablalba"); //no me deja ponerlo bien

o

byte direccion[] = new byte[4];
byte[0] = 0xff; //lo uqe sea cada byte
InetAddress destino = InetAddress.getByAddress(direccion);
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.