1. Descripción general
La clase Socket es la clase básica para que Java realice operaciones TCP del cliente. Esta clase misma usa código para comunicarse a través de la pila TCP local del sistema operativo host. Los métodos de clase de socket establecerán y destruirán conexiones y establecerán varias opciones de socket.
La clase Serversocket es la clase básica para que Java realice operaciones del lado del servidor. Esta clase se ejecuta en el servidor y escucha las conexiones TCP entrantes. Cada servidor Socket escucha un puerto del servidor. Cuando el cliente del host remoto intenta conectarse a este puerto, el servidor se despierta y devuelve un objeto de socket normal que representa el socket entre los dos hosts.
2. ¿Qué es TCP?
TCP es un protocolo de comunicación de capa de transporte basado en la corriente de bytes, confiable, orientado a la conexión. La comunicación TCP se divide en el cliente y el servidor, y los objetos correspondientes son Socket y Serversocket, respectivamente.
Cuando una computadora necesita conectarse a otra computadora remota, el protocolo TCP les permite establecer una conexión: un enlace virtual para enviar y recibir datos. El Protocolo TCP es responsable de recopilar paquetes de información y enviarlos en orden apropiado, y luego volverlos correctamente después de recibirlos en el extremo receptor. Para garantizar que el paquete de datos sea preciso durante la transmisión, TCP utiliza un mecanismo de retransmisión: cuando una entidad de comunicación envía un mensaje a otra entidad de comunicación, necesita recibir la información de confirmación de otra entidad. Si no se recibe información de confirmación, la información enviada justo ahora se resentirá nuevamente.
Iii. Comunicación TCP
1. Constructor
La clase Socket implementa los enchufes del cliente, y el constructor puede especificar el host y el puerto al que desea conectarse. El host se puede especificar como inetaddress o cadena, y el puerto siempre se especifica como un valor INT entre 0 y 65535.
Socket s = nuevo socket ("127.0.0.1", 10001); // Cree un socket de transmisión y conecte al número de puerto especificado en el host especificadoLa clase Serversocket implementa los enchufes del servidor. El socket del servidor espera que la solicitud se pase a través de la red, realiza algunas operaciones en función de la solicitud y luego devuelve el resultado al solicitante.
Serversocket ss = nuevo Serversocket (10001); // Cree un socket de servidor vinculado a un puerto específico
2. Ejemplo: copia del archivo TCP
Cliente:
clase pública ClientDemo {public static void main (string [] args) lanza desconocidaHosTexception, ioException {socket s = new Socket ("127.0.0.1", 10004); BufferedReader buf = new BufferedReader (new FileReader ("c: //Users//admonistrator//desktop//1.txt"); line = null;/*printWriter out = new PrintWriter (s.getOutputStream (), true); while ((línea = buf.readline ())! = null) {out.println (línea); } */Bufferedwriter out = new BufferedWriter (new OutputStreamWriter (s.getOutputStream ())); while ((line = buf.readline ())! = null) {out.write (line); out.newline (); out.flush ();} s.shutdownututput (); bufferedreader in = new BufferedReader (new InputStreamReader (s.getInputStream ())); str = in.readline (); system.out.println (str); s.close (); buf.close ();}}Lado del servidor:
public class ServerDemo {public static void main (string [] args) lanza IOException {Serversocket ss = new Serversocket (10004); socket s = ss.accept (); bufferedreader in = new BufferedReader (new InputStreamReader (s.getInputStream ()); FileWriter ("c: //users//administrator//desktop//2.txt"), true); while ((line = in.readline ())! = null) {buf.println (línea); }*/Bufferedwriter buf = new BufferedWriter (new FileWriter ("c: //users//administrator//desktop//2.txt")); while ((line = in.readline ())! = Null) {buf.write (line); buf.newline (); buf.flush ();} printwriter out = nuco = neo PrintWriter (s.getOutputStream (), true); out.println ("¡Transfiere exitoso!"); Ss.close (); buf.close ();}}4. Aplicación de Socket en navegación
Podemos escribir el lado del servidor en Eclipse y luego acceder a él usando el navegador.
Por ejemplo, el código del lado del servidor es:
Public Class SocketServer {public static void main (String [] args) lanza IOException {ServerSocket Server = new Serversocket (11000); Socket Client = Server.accept (); PrintWriter out = new PrintWriter (Client.getOutputStream (), true); out.println ("¡Hola!"); servidor.close (); }}Luego abra el navegador IE, ingrese http://192.168.1.120:11000/ en la dirección (192.168.1.120 es la dirección IP local), y el resultado es
En aplicaciones normales, el navegador emite una solicitud al servidor Tomacat para obtener recursos como imágenes de la página web. TOMCA es un software del lado del servidor escrito en Java.
Ahora escribimos el lado del servidor como:
Public Class SocketServer {public static void main (String [] args) lanza IOException {ServerSocket Server = new Serversocket (11000); Socket Client = Server.accept (); PrintWriter out = new PrintWriter (Client.getOutputStream (), true); BufferedReader in = new BufferedReader (new InputStreamReader (Client.getInputStream ())); Línea de cadena = nulo; while ((line = in.readline ())! = null) system.out.println (línea); out.println ("¡Hola!"); servidor.close (); }}Luego, al acceder al navegador, puede ver que los datos del encabezado de solicitud enviados por el navegador (cliente) al servidor es:
Usando los principios anteriores, podemos escribir un software del lado del navegador (cliente) similar al IE por nosotros mismos. Primero agregue un recurso Demo.html al directorio de instalación de Tomcat c: /apache-tomcat-7.0.62/webapps/myweb, y luego escriba el cliente, el código es el siguiente:
clase pública ClientDemo {public static void main (string [] args) lanza desconocidaHosTexception, ioexception {socket s = new Socket ("192.168.1.120", 8080); printWriter out = new PrintWriter (s.getOutputStream (), verdadero); // Envía la solicitud al servidor out.pintln ("get /weB /.HttLeMtlEl Http/1.1 "); out.println (" aceptar:*/*"); out.println (" host: 192.168.1.120:11000"); InputStreamReader (s.getInputStream ())); String Line = Null; // Devuelve el archivo de respuesta del servidor mientras ((línea = in.readline ())! = Null) {system.out.println (línea);} s.close ();}}A continuación, comienza Tomcat. Es decir, haga doble clic en el archivo startup.bat en c: /apache-tomcat-7.0.62/bin. Luego ejecute el código del cliente anterior y puede ver los datos de respuesta devueltos por Tomacat:
Resumir
Lo anterior es el ejemplo completo del código de comunicación TCP en este artículo sobre la programación de la red Java, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
Los conceptos básicos de la programación de redes de Java: comunicación unidireccional
Código de muestra para implementar la comunicación de socket en la programación multithreaded Java
Explicación detallada del Código de Modelo de Consumidor del Productor de Comunicación de Hilos y el mecanismo de despertar de espera de Java Multi-subprocesos
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!