logo

Programación de sockets Java

La programación Java Socket se utiliza para la comunicación entre las aplicaciones que se ejecutan en diferentes JRE.

La programación de Java Socket puede estar orientada a la conexión o sin conexión.

Las clases Socket y ServerSocket se utilizan para la programación de sockets orientada a la conexión y las clases DatagramSocket y DatagramPacket se utilizan para la programación de sockets sin conexión.

El cliente en la programación de sockets debe conocer dos informaciones:

  1. Dirección IP del servidor, y
  2. Número de puerto.

Aquí, vamos a realizar una comunicación unidireccional entre el cliente y el servidor. En esta aplicación, el cliente envía un mensaje al servidor, el servidor lee el mensaje y lo imprime. Aquí se utilizan dos clases: Socket y ServerSocket. La clase Socket se utiliza para comunicar cliente y servidor. A través de esta clase, podemos leer y escribir mensajes. La clase ServerSocket se utiliza en el lado del servidor. El método aceptar() de la clase ServerSocket bloquea la consola hasta que el cliente esté conectado. Después de la conexión exitosa del cliente, devuelve la instancia de Socket en el lado del servidor.

Programación de sockets en Java

clase de zócalo

Un socket es simplemente un punto final para las comunicaciones entre las máquinas. La clase Socket se puede utilizar para crear un socket.

Métodos importantes

MétodoDescripción
1) flujo de entrada público getInputStream()devuelve el InputStream adjunto con este socket.
2) flujo de salida público getOutputStream()devuelve el OutputStream adjunto con este socket.
3) cierre vacío sincronizado público ()cierra este enchufe

Clase ServerSocket

La clase ServerSocket se puede utilizar para crear un socket de servidor. Este objeto se utiliza para establecer comunicación con los clientes.

Métodos importantes

MétodoDescripción
1) aceptar socket público ()devuelve el socket y establece una conexión entre el servidor y el cliente.
2) cierre vacío sincronizado público ()cierra el socket del servidor.

Ejemplo de programación de sockets Java

Creando servidor:

Para crear la aplicación de servidor, necesitamos crear la instancia de la clase ServerSocket. Aquí, utilizamos el número de puerto 6666 para la comunicación entre el cliente y el servidor. También puede elegir cualquier otro número de puerto. El método aceptar() espera al cliente. Si los clientes se conectan con el número de puerto dado, devuelve una instancia de Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

Creando Cliente:

Para crear la aplicación cliente, necesitamos crear la instancia de la clase Socket. Aquí necesitamos pasar la dirección IP o el nombre de host del servidor y un número de puerto. Aquí, utilizamos 'localhost' porque nuestro servidor se ejecuta en el mismo sistema.

 Socket s=new Socket('localhost',6666); 

Veamos una programación simple de sockets Java donde el cliente envía un texto y el servidor lo recibe e imprime.

Archivo: MiServidor.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

Archivo: MiCliente.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
descarga este ejemplo

Para ejecutar este programa, abra dos símbolos del sistema y ejecute cada programa en cada símbolo del sistema como se muestra en la siguiente figura.

Después de ejecutar la aplicación cliente, se mostrará un mensaje en la consola del servidor.

Programación de redes Java

Ejemplo de programación de sockets Java (lectura y escritura en ambos lados)

En este ejemplo, el cliente escribirá primero en el servidor y luego el servidor recibirá e imprimirá el texto. Luego, el servidor escribirá al cliente y el cliente recibirá e imprimirá el texto. El paso continúa.

Archivo: MiServidor.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

Archivo: MiCliente.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}