En la programación de socket, veo que el servidor está vinculado a una dirección, que consta de IP y número de puerto. Luego los pasos son escuchar y aceptar (bloqueo de llamada). Me pregunto por qué el cliente no necesita vincularse con su dirección IP y número de puerto. De hecho, se vincula con la dirección del socket del servidor. Posteriormente, el cliente llama a la llamada connect() para establecer una conexión. Más tarde, el cliente y el servidor pueden comunicarse entre sí. ¿Cómo un servidor puede hablar con el cliente? El cliente no se ha vinculado con su dirección IP y número de puerto. ¿Cómo es posible que un servidor llegue al cliente?
Me pregunto por qué el cliente no necesita vincularse con su dirección IP y número de puerto.
Debido a que hay un enlace interno () como parte de connect (), si el socket aún no está vinculado, y porque al servidor no le importa cuál es el número de puerto del cliente: no necesita ser reparado como el del servidor número de puerto.
De hecho, se vincula con la dirección del socket del servidor.
No, no lo hace: se conecta a la dirección del servidor.
¿Cómo un servidor puede hablar con el cliente?
Sobre la conexión que se ha establecido.
El cliente no se ha vinculado con su dirección IP y número de puerto.
Sí lo tiene, ver arriba.
¿Cómo es posible que un servidor llegue al cliente?
De la misma manera el cliente llega al servidor. Enviando un paquete con una dirección y un puerto de destino.
La elección del número de puerto del cliente generalmente la realiza el núcleo. Esto tiene sentido ya que solo el núcleo sabe qué puertos están actualmente en uso. Sin embargo, puede especificar el puerto del cliente por su cuenta , pero creo que es difícil para el programa del cliente asegurarse de que el puerto esté libre. Podría simplemente "probar un error"
La elección de la dirección IP de los clientes también la suele hacer el núcleo, consultando las tablas de enrutamiento de IP. Puede mostrarlos y modificarlos usando el comando de route .
Ha preguntado cómo el servidor puede conocer la dirección IP del cliente. Debe comprender TCP/IP para responder a su pregunta. Lee el artículo de la wiki . Debería ser un buen punto de partida.
Es porque el cliente siempre tiene que conectarse al servidor. El cliente puede ser llamado como esclavo y el servidor es siempre el maestro. Pero el servidor puede hablar con el cliente solo si hay un código particular dado tal Flujo de entrada almacenado en búfer. de lo contrario, no puede enviar ninguna entrada al cliente, incluso si hay una conexión. El número de puerto es básicamente la dirección del programa almacenado en la computadora del servidor. por lo tanto, cuando el programa en el lado del cliente tiene que comunicarse con el lado del servidor, necesita el número de puerto, por lo que el lado del servidor no necesita el número de puerto del cliente, ya que el programa del cliente en sí mismo quiere acceder al programa del servidor.