sockets

Iniciado por m@o_614, 1 Marzo 2015, 03:10 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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 (java) [Seleccionar]
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
public class Emisor{
public static void main(String args[]){
DatagramSocket socketEmision;
DatagramPacket dp;
String ip=args[0];
String mensaje=args[1];
//int puertoSalida=2002;
byte[] buffer;
//System.out.print("Iniciando socket emision en puerto "+puertoSalida+"...");
try{
socketEmision=new DatagramSocket();  //constructor sobrecargado para recibir o no un #puerto
System.out.println("hecho");
buffer=mensaje.getBytes();
dp=new DatagramPacket(buffer,buffer.length,InetAddress.getByName(ip),2001);
socketEmision.send(dp);
System.out.print("Cerrando socket emision...");
socketEmision.close();
System.out.println("hecho");
}catch(SocketException e){
System.out.println("Error iniciando socket: "+e.getMessage());
}catch(UnknownHostException e){
System.out.println("UnknownHostException: "+e.getMessage());
}catch(IOException e){
System.out.println("IOException: "+e.getMessage());
}
}
}


y el otro es:

Código (java) [Seleccionar]
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.io.IOException;
public class Receptor{
public static void main(String args[]){
DatagramSocket socketRecepcion;
DatagramPacket dp;
int puertoEntrada=2001;
byte[] buffer=new byte[1024];
System.out.print("Iniciando socket recepcion en puerto "+puertoEntrada+"...");
try{
socketRecepcion=new DatagramSocket(puertoEntrada);
System.out.println("hecho");
dp=new DatagramPacket(buffer,buffer.length);
while(true){//deseable validar con bandera
socketRecepcion.receive(dp);
System.out.print("IP emisora: "+dp.getAddress().toString()+":");
System.out.println(new String(buffer,0,dp.getLength()));
}
//socketRecepcion.close();//código inalcanzable sin bandera
}catch(SocketException e){
System.out.println("Error iniciando socket: "+e.getMessage());
}catch(IOException e){
System.out.println("IOException: "+e.getMessage());
}
System.out.print("Cerrando socket recepcion...");
System.out.println("hecho");
}
}


es estrictamente necesario tener dos archivos???

Usuario Invitado

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.
"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

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 (java) [Seleccionar]
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
import javax.swing.*;

public class Emisor {
DatagramSocket emisionSocket;
DatagramPacket paquete;
String IP;
byte[] mensaje;

Emisor(JTextField campoMensaje,JTextField campoIP){
mensaje = campoMensaje.getText().getBytes();
IP = campoIP.getText();
}

public void main() {
try
{
emisionSocket = new DatagramSocket();
paquete = new DatagramPacket(mensaje,mensaje.length,InetAddress.getByName(IP),2001);
emisionSocket.send(paquete);
emisionSocket.close();
}
catch(SocketException e){
e.getMessage();
}
catch(UnknownHostException e){
e.getMessage();
}
catch(IOException e){
e.getMessage();
}
}

}


de antemano gracias

Usuario Invitado

Sí, a simple vista me parece correcto.
"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