====== Sockets ======
Un Socket es un punto de conexión (Una Tubería o un Canal) entre 2 procesos e identificado por una IP y un Puerto.
En este caso serán 2 procesos ejecutándose simultáneamente conectados por un socket.
{{ :dad:socket.png |}}
Un socket funciona de una forma similar a la de los ficheros. Para leer y escribir utilizaremos un Buffer (PrintWritter y BufferedReader)
===== Cliente =====
{{ :dad:imagen_2023-10-05_110539888.png |}}
===== Servidor =====
{{ :dad:imagen_2023-10-05_110936729.png |}}
===== Implementación Cliente =====
{{ :dad:imagen_2023-10-05_115043040.png |}}
package jelouda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Cliente {
public void ejecutar() {
try {
System.out.print("Lanzando conexión....");
Socket socket = new Socket ("127.0.0.1", Servidor.PUERTO);//Conectamos al servidor
System.out.println("[OK]");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Bufer de lectura
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer de escritura
String cadenaRecibida = br.readLine();
System.out.println(cadenaRecibida);
pw.println("cadena recibida" + cadenaRecibida);
pw.flush();
System.out.println("Fin del Cliente");
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Cliente client = new Cliente();
client.ejecutar();
}
}
===== Implementación Servidor =====
{{ :dad:imagen_2023-10-05_115144753.png |}}
package jelouda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Servidor {
public static int PUERTO = 5000;//Indicamos el puerto del servidor
public void ejecutar() {
try {
System.out.println("Lanzando Servidor...");
ServerSocket serverSocket = new ServerSocket(Servidor.PUERTO);
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Buffer entrada
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer salida
String cadenaRecibida = br.readLine();
pw.print(cadenaRecibida);
pw.flush();
System.out.println("Fin del Servidor");
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Servidor server = new Servidor();
server.ejecutar();
}
}
===== Implementación Servidor continuo =====
Añadimos un nuevo método al que llamaremos ejecutar infinito:
{{ :dad:imagen_2023-10-05_120946334.png |}}
package jelouda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Servidor {
public static int PUERTO = 5000;//Indicamos el puerto del servidor
public void ejecutar() {
try {
System.out.println("Lanzando Servidor...");
ServerSocket serverSocket = new ServerSocket(Servidor.PUERTO);
//Lo hacemos contínuo
//Scanner sc = new Scanner(System.in);
//sc.nextLine();
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Buffer entrada
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer salida
String cadenaRecibida = br.readLine();
pw.print(cadenaRecibida);
pw.flush();
System.out.println("Fin del Servidor");
}catch(IOException e){
e.printStackTrace();
}
}
public void ejecutarInfinito() {
try {
System.out.println("Lanzando Servidor...");
ServerSocket serverSocket = new ServerSocket(Servidor.PUERTO);
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Buffer entrada
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer salida
while(true) {
System.out.println(br.readLine());
pw.println(br.readLine());
pw.flush();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Servidor server = new Servidor();
server.ejecutarInfinito();
}
}
===== Implementación cliente Continuo =====
Añadimos un nuevo método al que llamaremos ejecutar infinito:
{{ :dad:imagen_2023-10-05_120728806.png |}}
package jelouda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Cliente {
public void ejecutar() {
try {
System.out.print("Lanzando conexión....");
Socket socket = new Socket ("127.0.0.1", Servidor.PUERTO);//Conectamos al servidor
System.out.println("[OK]");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Bufer de lectura
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer de escritura
String cadenaRecibida = br.readLine();
System.out.println(cadenaRecibida);
pw.println("cadena recibida" + cadenaRecibida);
pw.flush();
System.out.println("Fin del Cliente");
}catch(IOException e){
e.printStackTrace();
}
}
public void ejecutarInfinito() {
try {
System.out.print("Lanzando conexión....");
Socket socket = new Socket ("127.0.0.1", Servidor.PUERTO);//Conectamos al servidor
System.out.println("[OK]");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//Bufer de lectura
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));//Buffer de escritura
String lineaLeida ="";
Scanner teclado = new Scanner(System.in);
while(true) {
lineaLeida = teclado.nextLine();
pw.println(lineaLeida);
pw.flush();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Cliente client = new Cliente();
client.ejecutarInfinito();
}
}