¿Cómo accede el socket al nombre de dominio?
En este artículo, discutiremos los pasos y métodos básicos para usar la clase Socket. Al conectarse a un programa de servicio, un programa cliente de red universal debe realizar los siguientes tres pasos.
1. Conéctese al servidor
2. Envíe y reciba datos
3. Cierre la conexión de red
Primero, conéctese a. el servidor
Hay dos formas para que el cliente se conecte al servidor, una es conectarse al servidor a través de IP y la otra es conectarse al servidor a través del nombre de dominio.
De hecho, estos dos métodos son esencialmente el mismo método. Básicamente, el cliente se conecta al servidor a través de IP, pero existen algunas diferencias entre las dos formas. Si el programa del servidor está conectado a través de IP, entonces el cliente simplemente se conecta según IP. Si el servidor está conectado a través de un nombre de dominio, el cliente debe resolver el nombre de dominio en una IP a través de DNS y luego conectarse según esta IP.
En muchos lenguajes de programación o herramientas de desarrollo (como C/C++, Delphi), cuando se utiliza el método de nombre de dominio para conectarse al servidor, el nombre de dominio debe resolverse primero en IP y luego conectados a través de IP. En Java, la clase Socket ya contiene la función de resolución de nombres de dominio, por lo que solo necesitamos usar nombres de dominio como IP.
La forma más común de conectarse a un programa de servidor a través de la clase Socket es pasar la IP o el nombre de dominio y el número de puerto como parámetros a la clase Socket a través del constructor de la clase Socket. El constructor de la clase Socket tiene muchas formas sobrecargadas. Esta sección solo analiza la forma más utilizada: socket público (host de cadena, puerto int). A juzgar por la definición de este constructor, solo necesita pasar la IP o el nombre de dominio y el número de puerto directamente al constructor. El siguiente código es un programa de muestra para conectarse al programa del servidor:
Paquete mysocket
Importar Java net.*;
Clase pública MyConnection
{
Public static void main(String[] args)
{
Probar
{
if (args . length & gt; 0)
{
Socket socket = new Socket(args[0], 80);
Sistema .out.println (args[0]+"¡Conexión exitosa!");
}
Otros
System.out.println("Especifique la IP o nombre de dominio!" );
}
Captura (Excepción e)
{
System.err.println("Error mensaje: "+e .getmessage());
}
}
}
La IP o el nombre de dominio se pasa a el programa a través de los parámetros de la línea de comando anteriores Luego conéctese al puerto 80 de la IP o nombre de dominio especificado a través de los parámetros de la línea de comando a través del socket socket = new socket (args [0], 80). Dado que el constructor de la clase Socket usa throws cuando está definido, al llamar al constructor de la clase Socket, debe usar la declaración try...catch para detectar errores, o usar la declaración throws para generar un error para la función principal. .
Prueba la IP correcta
java mysocket.
Mi conexión 127.0.0.1
Resultado de salida: ¡127.0.0.1 se ha conectado correctamente!
Prueba IP incorrecta
java mysocket. Mi conexión 10.10.10.10
Salida: Mensaje de error: Se agotó el tiempo de conexión: Conectar.
Nota: 10.10.10 es una IP que no existe. Si esta IP existe en tu red, utiliza otra que no exista.
Pruebe el nombre de dominio correcto
java mysocket. Mi conexión a www.ptpress.com.cn
Resultado de salida: ¡www.ptpress.com.cn se ha conectado correctamente!
Probando el nombre de dominio incorrecto
java mysocket. mi conexión www .pt press 1 . com cn
Resultado de salida: Mensaje de error: www.ptpress1.com.cn
El uso de la clase Socket para conectarse al servidor puede determinar cuál Los puertos del host están abiertos. El siguiente código es un programa que escanea qué puertos están abiertos en esta máquina.