¿Por qué no le das una oportunidad a esto?
Para comprender la programación de socket en Java y cómo enviar archivos de texto entre el servidor y el cliente, primero debe comprender los conceptos básicos de las redes.
Ves redes no es más que una conexión. Cuando conecta dos cosas juntas de tal manera que puede pasar datos de un lado a otro, se dice que han establecido una red. Un muy buen ejemplo de redes sería un mensajero donde pasas todo el día enviando datos de un dispositivo a otro.
- ¿Qué tan bueno es el libro JavaScript Eloquent en comparación con Codeacademy?
- ¿Cuál es el mejor libro para aprender cómo comenzar a importar productos directamente de los fabricantes en China?
- ¿Cuál es su opinión sobre la programación funcional en Scala (libro de 2014)?
- ¿Cuál es el mejor libro para repasar y aprender nuevos algoritmos?
- ¿Cómo es que los diagramas de secuencia no se utilizan más en los libros de programación sobre frameworks como OSGi, Spring o .NET?
Habría miles de veces en las que se le requeriría enviar algo a través de una red, podría ser una interacción menor con un sistema cliente, o simplemente algo que desea enviar para recibir ese “hola desde el otro lado”. Ahí es donde interviene la programación de sockets en Java.
Términos de red
Un par de términos para romper el hielo para que sepa a qué se enfrenta aquí. No profundizaría mucho en las redes de computadoras porque es un tema realmente vasto y no necesitamos mucho para entender la programación de sockets en Java. Así que solo vamos a echarle un vistazo.
Dirección IP
Es como un número de teléfono pero para computadoras. Sin embargo, no puedes marcarlo para pizza. A cada computadora se le asigna una dirección IP que va más o menos así:
A cada computadora se le asigna una dirección IP que va más o menos así:
192.168.0.1
Cada número antes del ‘.’ y después es un octeto. Entonces, tenemos cuatro octetos que oscilan entre 0 y 255. La dirección IP también se conoce como dirección lógica y se puede cambiar.
Bueno, ¿y si te digo que tu sistema también tiene una dirección IP? Aquí le mostramos cómo comprobarlo:
Simplemente vaya a su símbolo del sistema (cmd) y escriba ipconfig. Presione Entrar:
Ves ese bit enrojecido contra la dirección IPv4, esa es tu dirección IP allí mismo.
Protocolo
Protocolo es exactamente lo que significa lo que crees que significa. Un conjunto de reglas que sigue su sistema para la comunicación de red. Cada conjunto de reglas se ha definido en función del tipo de mensaje que envía a través de una red.
Por ej.
- TCP – Protocolo de control de transmisión (acuse de recibo enviado por el receptor / protocolo orientado a la conexión )
- UDP: protocolo de datagramas de usuario (el receptor / conexión no envía ningún acuse de recibo)
Otros ejemplos serían:
- HTTP – Protocolo de transferencia de hipertexto
- FTP – Protocolo de transferencia de archivos
- SMTP – Protocolo simple de transferencia de correo
- Telnet
Número de puerto
Si todavía estamos hablando de teléfonos aquí, es como una extensión. Es necesario para que su sistema entienda dónde debe establecerse la conexión.
Cada número de puerto identifica una aplicación. Entonces, ¿qué aplicación necesitamos para establecer una conexión tiene que estar predefinida?
Es un entero sin signo de 16 bits con un valor que varía de 0 a 65535.
Entonces, ¿cómo sabe la segunda computadora o dispositivo dónde redirigir ese paquete entrante? Verá que cada paquete de datos que se envía conserva un número de puerto en su archivo de encabezado que le indica al sistema a dónde debe ir realmente el paquete.
Enchufe
Un punto cardinal para aprender programación de sockets en Java. Un socket no es más que un punto final a cada lado de las dos computadoras o dispositivos que es responsable de enviar o recibir los datos a través de una red. Los datos se envían a un solo nodo. Hay un número de puerto asignado a cada socket para que la computadora entienda a dónde deben enviarse los datos.
Por lo tanto, la dirección del socket sería una colección de la dirección IP y el número de puerto unidos.
Un eg
192.168.0.1: 8080
Cuando proporciona un socket con una dirección de socket, se denomina enlace .
Dirección MAC
Al igual que hay una dirección lógica, cada sistema también tiene una dirección física. A diferencia de la dirección lógica o la dirección IP, no se puede cambiar. Se identifica con su NIC (controlador de interfaz de red) y está codificado en él.
MAC es un acrónimo de Media Access Control. Es una colección de 6 octetos aquí. Puede consultar la dirección MAC simplemente escribiendo lo siguiente en el símbolo del sistema:
ipconfig / all
Como puede ver, los diferentes adaptadores tienen sus propias direcciones físicas, sin embargo, cada dirección física que identifique ese adaptador o NIC siempre será única:
Por lo tanto, está claro que son dos sistemas involucrados cuando está intentando enviar algo y el otro sistema está tratando de recibirlo. Para nuestro ejemplo, no necesitaríamos dos sistemas, aunque puede probarlo en dos y seguirá funcionando allí. Existe este localhost con dirección IP:
127.0.0.1
que básicamente se refiere a tu propio sistema. Podemos usarlo para enviar nuestros datos y recibirlos simultáneamente en nuestro sistema. El comportamiento sería como si lo enviáramos en un sistema diferente.
Programación de sockets en Java
Cuando intentas establecer una conexión entre aplicaciones que están en diferentes JRE, ahí es donde entra en escena la programación de sockets en Java.
Aquí la conexión establecida podría ser orientada a la conexión o sin conexión.
Si desea optar por la programación orientada a la conexión, las siguientes clases son útiles: (TCP)
- Enchufe
- ServerSocket
Si desea obtener una programación sin conexión, las siguientes clases vienen al rescate: (UDP)
- DatagramSocket
- DatagramPacket
Veremos programación orientada a la conexión para entender la programación de sockets en Java.
Clase de enchufe
Socket Class es una de las clases cruciales que debe conocer como parte de la programación de socket en Java. Lo usamos en el lado del cliente.
La clase Socket es la que extiende directamente el objeto. Sirve como punto final entre dos máquinas.
Estos son los constructores de la clase Socket que podría usar:
- Enchufe()
- Socket (dirección InetAddress, puerto int)
- Socket (dirección InetAddress, puerto int, InetAddress localAddr, int localPort)
- Socket (proxy proxy)
- Socket (SocketImpl impl)
- Socket (host de cadena, puerto int)
- Socket (host de cadena, puerto int, InetAdress localAddr, int localPort)
Hay tantos métodos aquí que podría usar para hacer las cosas. Sin embargo, los métodos más importantes que debe recordar son:
- getInputStream ()
- getOutputStream ()
- cerca()
Los dos primeros métodos devuelven InputStream y OutputStream contra el socket, respectivamente. close () devuelve void y se usa para cerrar el socket. Está sincronizado por defecto.
Entonces, al escribir un programa para la programación de sockets en Java, debemos especificarlo en el siguiente formato:
Socket s = nuevo Socket (“localhost”, 6666);
donde el primer argumento es la dirección localhost que puede reemplazar con la dirección IP de cualquier otra computadora, mientras que el segundo argumento es el del puerto no.
Clase ServerSocket
Otra clase importante que le brinda más información sobre la programación de sockets en Java. Lo usas al final del servidor.
Cuando tiene que establecer una conexión con una computadora, hacemos uso de la clase ServerSocket. Crea un socket de servidor con él.
Un socket de servidor básicamente espera que aparezca una solicitud en la red. Una vez que se recibe la solicitud, realiza las acciones necesarias al mismo tiempo que envía un acuse de recibo al remitente.
Estos son los constructores que puede usar para crear una clase ServerSocket:
- ServerSocket ()
- ServerSocket (puerto int)
- ServerSocket (int port, int backlog)
- ServerSocket (int port, int backlog, InetAddress bindAddr)
Los métodos importantes para recordar aquí son:
- aceptar()
- cerca()
El método accept () devuelve el socket escuchando la conexión y estableciendo una.
Entonces, mientras escribe un programa para la programación de sockets en Java, debe escribirlo en el siguiente formato:
ServerSocket ss = nuevo ServerSocket (6666);
donde 6666 no es más que el puerto no. donde se establece la conexión.
Luego, debemos esperar el socket del cliente utilizando el método accept () que devuelve Socket. Por lo tanto, el siguiente código debería ser
Socket s = ss.accept ();
Programa para transferir datos del cliente al servidor
Ahora veremos un programa para comprender la programación de sockets en Java. Ayudará a aclarar la imagen completa. Haremos esto a la antigua usanza. Sin recurrir al uso de Eclipse. Simplemente creemos dos archivos de bloc de notas separados, uno que represente al cliente y el otro servidor .
Aquí están nuestros dos archivos de bloc de notas, con un aspecto agradable y feliz.
Pasos para enviar datos a través de
Mientras que la programación de sockets en Java, primero debe tener los paquetes correctos a su disposición.
Paso 1: Importa los paquetes relevantes primero. No desea que el compilador arroje un error al decir que no reconoce las cosas que ha estado escribiendo.
Escriba lo siguiente en la parte superior:
import java.net. *;
import java.io. *;
El primero es para todas las clases de redes, incluidos Socket y ServerSocket. El segundo es para las clases de entrada y salida.
Entonces, ¿cuáles son las cosas que debemos hacer?
Código de cliente para enviar datos a través de
Es el Cliente quien enviará los datos. Haremos uso de la clase DataOutputStream para enviar algunos datos.
Paso 2: escriba el siguiente código en el archivo de bloc de notas del cliente. Aquí está el código a escribir:
import java.net. *;
import java.io. *;
Cliente de clase pública {
public static void main (String [] args) {
tratar {
Socket s = nuevo Socket (“localhost”, 1999);
DataOutputStream dos = nuevo DataOutputStream (s.getOutputStream ());
dos.writeUTF (“Si la dilación fuera un deporte, competiría en él más tarde”);
} catch (IOException es decir) {
es decir, printStackTrace ();
}
}
}
Observe cómo hemos utilizado el método writeUTF (). Ayudará a pasar una cadena en formato Unicode. Tenemos un método contrastante readUTF en la clase DataInputStream que puede leerlo fácilmente.
Hemos hecho uso del constructor Socket (String host, int port) aquí. Puerto no. puedes usar cualquiera.
Paso 3: Guarde el archivo como “Client.java”.
NOTA: No hemos cerrado el socket y DataOutputStream, siempre es una buena idea cerrarlos.
Código de servidor para escuchar conexiones
Es tarea del servidor escuchar las conexiones y establecer si hay una. El código aquí será bastante sencillo de entender.
Paso 4: escriba el siguiente código en el archivo de bloc de notas del servidor que ha creado:
import java.net. *;
import java.io. *;
Servidor de clase pública {
public static void main (String [] args) {
tratar {
ServerSocket ss = nuevo ServerSocket (1999);
Socket s = ss.accept ();
DataInputStream dis = new DataInputStream (s.getInputStream ());
System.out.println (dis.readUTF ());
} catch (IOException es decir) {
es decir, printStackTrace ();
}
}
}
Aquí todo lo que tenemos que hacer es escuchar. El método aceptar () nos ayuda a hacer exactamente eso. Además, debemos proporcionar el número de puerto. Asegúrese de que tenga el mismo significado en perfecta sincronización con el nodo.
Paso 5: Guarde el archivo como “Server.java”.
NOTA: No hemos cerrado la referencia de ServerSocket y DataInputStream, siempre es una buena idea cerrarlos.
Compilación y Ejecución
Ahora es el momento de compilar el programa y luego ejecutarlo. Si ha olvidado cómo hacerlo en cmd , siempre puede volver atrás para ver el primer programa de demostración de Java que hicimos al principio.
Lea el artículo completo aquí: Programación de sockets en Java | Envío de archivos de texto entre el servidor y el cliente