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