1. Conceptos básicos de red
Primero, aclare un concepto: ¡Programación de redes! = Programación del sitio web, la programación de red ahora se llama generalmente la programación TCP/IP.
2. Protocolo e interfaz de comunicación de red
3. Idea de capas de protocolo de comunicación
4. Modelo de referencia
V. Protocolo IP
La computadora de todos tiene una dirección IP única para que el mensaje de error no se transmita al comunicarse entre sí.
Una dirección IP se divide en cuatro segmentos por un punto. La dirección IP dentro de la computadora está representada por cuatro bytes. Un byte representa un segmento, y el número máximo representado por cada byte solo puede alcanzar 255.
VI. Protocolo TCP y protocolo UDP
TCP y UDP se encuentran en la misma capa y se basan en la capa IP. Dado que las dos computadoras tienen diferentes direcciones IP, las dos computadoras se pueden distinguir y se pueden hablar entre ellas. Generalmente hay dos formas de hablar: el primero es TCP y el segundo es UDP. TCP es una conexión confiable. TCP es como hacer una llamada telefónica. Debe llamar primero a la otra parte y esperar a que la otra parte responda antes de continuar hablando con la otra parte. Es decir, debe confirmar que puede enviar el mensaje antes de enviar el mensaje. TCP carga cualquier cosa confiable. Mientras se establezca una conexión en dos máquinas, los datos enviados en la máquina definitivamente se transmitirán a la máquina de la otra parte. UDP es como enviar un telegrama, y se realizará si se envía. No importa si la otra parte lo recibe o no, por lo que UDP no es confiable. Aunque TCP transmite datos de manera confiable, se transmite lentamente. UDP transmite datos poco confiables, pero se transmite rápidamente.
7. Programación de sockets
En general, la programación de red se llama programación de socket, y el socket significa "socket" en inglés.
Instale un enchufe en ambas computadoras y luego conecte los dos extremos de un cable en las enchufes de las dos computadoras, para que las dos computadoras puedan establecer una conexión. Este enchufe es el socket.
Debido a que pueden comunicarse entre sí, dije que usted es mi servidor, pero en un sentido lógico, debo enviarle las cosas primero, y luego las manejará y los reenviará. Entonces lo llamas servidor. Pero en un sentido técnico, solo TCP dividirá el servidor y el cliente. Para UDP, en un sentido estricto, no hay el llamado servidor y cliente. El socket del servidor TCP se llama Serversocket, y el socket del cliente se llama Socket.
Cuando dos computadoras están conectadas entre sí, primero debe conocer sus direcciones IP, pero proporcionar solo direcciones IP no es suficiente. También debe tener el número de puerto de la conexión, es decir, a qué aplicación conectarse.
El número de puerto se utiliza para distinguir diferentes aplicaciones en una máquina. El número de puerto ocupa 2 bytes dentro de la computadora. Hay hasta 65536 números de puerto en una máquina. Una aplicación puede ocupar múltiples números de puerto. Si el número de puerto está ocupado por una aplicación, otras aplicaciones ya no podrán usar este número de puerto. Recuerde, si el programa que escribimos debe ocupar el número de puerto, si desea ocupar el número de puerto por encima de 1024, no ocupe el número de puerto por debajo de 1024, porque el sistema puede ser solicitado en cualquier momento. El número de puerto en sí se divide en el puerto TCP y el puerto UDP. El puerto TCP 8888 y el puerto UDP 8888 son dos puertos completamente diferentes. Hay 65536 puertos TCP y puertos UDP.
8. Modelo de comunicación de socket TCP
9. Ejemplos de uso de sockets
Mínimo
import java.net.*; import java.io.*; public class testServerSocket {public static void main (string args []) arroja excepción {Serversocket ss = new Serversocket (6666); /* Al crear un objeto Serversocket, a menudo se le asigna un número de puerto. El significado es usar qué número de puerto debe usar el nuevo objeto Serversocket y qué número de puerto escuchar la conexión del cliente. Por lo tanto, el significado de especificar un número de puerto es decirle a la computadora dónde el objeto Serversocket escucha la conexión del cliente. */ * El lado del servidor recibe las solicitudes de conexión del cliente continuamente, por lo que la programación del lado del servidor es generalmente un bucle muerto y se ejecuta sin fin. */ while (true) {socket s = s.accept (); /*Llame al método Acept () en el lado del servidor para aceptar el objeto de conexión del cliente. El método Acept () es un método de bloqueo. He estado esperando tontamente si un cliente solicita la conexión. Luego, el enchufe del socket en el lado del servidor establece una conexión con el enchufe de socket en el cliente. * / /* Si el cliente puede conectarse al lado del servidor depende de si el lado del servidor acepta la solicitud de conexión del cliente. Si el cliente acepta la solicitud de conexión, instale un enchufe de socket en el lado del servidor para establecer una conexión con el cliente a través de este socket y comunicarse entre sí. */ System.out.println ("¡Un cliente conectado!"); /* Use la transmisión de InputStream para recibir información enviada desde el cliente y use el flujo de datos DataInputStream para procesar la información recibida*/ DataInputStream Dis = New DataInputStream (s.getInputStream ()); /* Usar ReadUtf (el método lee toda la información recibida y la almacena en la variable STR para leer el método ReadUtf () también es un método de bloqueo. Esperará tñador a que el cliente envíe información y luego lea la información recibida. El programa del lado del servidor está bloqueado, por lo que el otro cliente no puede conectarse, porque si otro cliente desea conectarse al servidor, debe llamar al método Acept () en el lado del servidor, sin embargo, el método Acept () debe llamarse en el siguiente bucle, ahora el Servidor está bloqueado si el Cliente no se llama. poder leer la información. Socador de clientes
import java.net.*; import java.io.*; public class testClientsocket {public static void main (string args []) arroja excepción {socket s = new Socket ("127.0.1", 6666); /*Cliente se aplica para conectarse al lado del servidor* / /*Después de conectarse al lado del servidor, puede generar información al lado del servidor y recibir información devuelta desde el lado del servidor, y recibir información de salida de información y recibir información de retorno. Tanto el principio de entrada como el principio de salida deben usarse para procesar la información*//*Aquí está la información de salida de salida de salida de salida de salida al lado del servidor*/ outputStream OS = s.getOutputStream (); DatautputStream dos = new DataOutputStream (OS); Thread.sleep (30000);/*El cliente duerme durante 30 segundos antes de enviar información al servidor*/ dos.Writeutf ("¡Hello Server!"); }}El cliente solicita una conexión al servidor a través del puerto 6666. Después de que el servidor acepta la solicitud de conexión del cliente, instala un socket en el servidor y luego conecta este socket con el socket del cliente, para que el servidor pueda comunicarse con el cliente. Cuando otro cliente se aplica para una conexión, después de que el servidor la acepta, se instalará otro socket para conectarse al socket del cliente.