Hola a todos, hoy os explicaré como podemos crear una conexión TCP en Java.
Gracias a los sockets, podemos conectarnos a otras maquinas y realizar el patrón de cliente/servidor, que nos permite por ejemplo mandar mensajes entre 2 maquinas distintas.
La conexión TCP es orientada a conexión, es decir, el servidor sabe espera a que una maquina se conecte y cuando llega una maquina, sabe quien es, en otras palabras, necesita saber quien se conecta al servidor.
El código puede estar en el mismo proyecto para probar.
Este seria el código del cliente.
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class Cliente { public static void main(String[] args) { //Host del servidor final String HOST = "127.0.0.1"; //Puerto del servidor final int PUERTO = 5000; DataInputStream in; DataOutputStream out; try { //Creo el socket para conectarme con el cliente Socket sc = new Socket(HOST, PUERTO); in = new DataInputStream(sc.getInputStream()); out = new DataOutputStream(sc.getOutputStream()); //Envio un mensaje al cliente out.writeUTF("¡Hola mundo desde el cliente!"); //Recibo el mensaje del servidor String mensaje = in.readUTF(); System.out.println(mensaje); sc.close(); } catch (IOException ex) { Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex); } } }
Este sería el código del servidor.
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class Servidor { public static void main(String[] args) { ServerSocket servidor = null; Socket sc = null; DataInputStream in; DataOutputStream out; //puerto de nuestro servidor final int PUERTO = 5000; try { //Creamos el socket del servidor servidor = new ServerSocket(PUERTO); System.out.println("Servidor iniciado"); //Siempre estara escuchando peticiones while (true) { //Espero a que un cliente se conecte sc = servidor.accept(); System.out.println("Cliente conectado"); in = new DataInputStream(sc.getInputStream()); out = new DataOutputStream(sc.getOutputStream()); //Leo el mensaje que me envia String mensaje = in.readUTF(); System.out.println(mensaje); //Le envio un mensaje out.writeUTF("¡Hola mundo desde el servidor!"); //Cierro el socket sc.close(); System.out.println("Cliente desconectado"); } } catch (IOException ex) { Logger.getLogger(Servidor.class.getName()).log(Level.SEVERE, null, ex); } } }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Hola, tengo una duda con el HOST
El HOST debe ser la direccion de la computadora o puede ser cualquiera
Y si es la computadora como veo mi direccion?
Saludos desde México
el host de tu maquina lo puedes ver desde cmd con el comando hostname o con tu ip con el comando ipconfig
Buenas tardes
Dos dudas que tengo
1. Para que no se cierre el cliente que hay que hacer porque a mi se me cierra al recibir el mensaje
2. Para poder seguir mandando mas mensajes como se hace, hay que repetir todo el codigo
Gracias