Que es el socket
Los dos programas en la red implementan el intercambio de datos a través de una conexión de comunicación de dos vías. El socket generalmente se usa para lograr la conexión entre el cliente y la fiesta de servicio. Socket es una interfaz de programación muy popular del protocolo TCP/IP, y se determina un socket mediante una dirección IP y un número de puerto.
Sin embargo, los tipos de protocolos compatibles con el socket no solo son TCP/IP, por lo que no hay necesariamente conexión entre los dos. En el entorno Java, la programación de socket se refiere principalmente a la programación de red basada en el protocolo TCP/IP.
El proceso de comunicación de socket
Ya sea que el servidor final de escucha (monitor) tenga una solicitud de conexión, el cliente envía una solicitud de conexión al lado del servidor y el servidor envía el mensaje de acceso al cliente. Se establece una conexión. Tanto el servidor como el cliente pueden comunicarse con la otra parte a través de envío, escritura y otros métodos.
Para un enchufe completo, se deben incluir las siguientes estructuras básicas.
(1) crear un socket;
(2) Abra la entrada/flujo de salida conectado al enchufe;
(3) Operación de lectura/escritura del zócalo según un determinado protocolo;
(4) Apague el socket. no causa nada para causar nada.
Crear enchufes
Java proporciona dos tipos de enchufes y servidores en java.net, que se utilizan para representar el cliente y el servidor de la conexión de dos vías. Estas son dos clases muy buenas que son muy buenas, lo cual es conveniente de usar. El método de estructura es el siguiente:
Socador (dirección indaddress, int); LocalAdDR, int localport) (la dirección de ineTAddddress, intAddddress Localddr, int localport)
Entre ellos, la dirección IP, el nombre del host y el número de puerto de la otra parte en la conexión de dos vías, respectivamente. La dirección de host de Serversocket), Impl es la clase principal del socket, que se puede usar para crear un ServerSket y se puede usar para crear un socket. El recuento significa el número máximo de conexiones que el servidor puede admitir. Por ejemplo: Learning Video Network http://www.xxspw.com
Socket Client = nuevo socket
Tenga en cuenta que al seleccionar un puerto, debe tener cuidado. Cada puerto proporciona un servicio específico. El número de puerto de 0 ~ 1023 está reservado por el sistema. Elija el número de puerto, es mejor elegir uno superior a 1023. El número es evitar conflictos.
Si se produce un error al crear un socket, se generará IOException y debe procesarse en el programa. Por lo tanto, la creación de un socket o servidor de machos debe ser capturado o lanzado.
Código
servidor
Socador de paquete Java.io.*; . El " +Count +" Times! "); Count ++; String Line = Input.Readline (); System.out.println (" Cliente dijo: " +Line); if (" Line.equals ("Salir") ) {flag = false; Cliente {Client .Close ();}} Finalmente {server.close ();}}}
cliente
SOLKE DE PACEPTO JAVA.IO.*; .. Cin. NextLine (); }}}}}}
IP de enlace de servidor
Al escribir sockets con C, la estructura Struct Sockaddr_in puede especificar sin_addr.s_addr, es decir, puede especificar la dirección IP.
Es posible que solo desee vincular la dirección IP de la tarjeta de red ETH0, porque mi LO y WLAN0 pueden estar utilizando un host virtual NGINX con un puerto.
plan
Un constructor del servidor es el siguiente:
Public Serversocket (int Port, Intaddddress bindddr) lanza ioexception
parámetro:
Puerto -puerto TCP local
Ayuda a la lista
bindAddr -para ser vinculado por el servidor
Debido a que el inetaddress no tiene constructor, he estado enredado aquí por un tiempo.
Por ejemplo código
Indadress bindip = inetaddress.getByName ("192.168.1.168"); Acceso concurrente
El servidor maneja múltiples clientes al agregar solicitudes de múltiples temas al mismo tiempo.
Código de servidor
Paquete CapitSockion; Static int clientNum = 0; ), Capitalizeerver.ClientNum ++); (Socket s, int id) {this.client = s; true) {String data = input.readline (); ); ;} Catch (ioException e) {E.PrintStackTrace ();}}}}}}}}}}}
Código del cliente El código del cliente básicamente no ha cambiado, agregando una operación de salida
Paquete CapitSocket; 1.168 ", 9898); intente {imprimwriter outputy = new PrintWriter (Client.getOutputStream (), true); Scanner CIN = new Scanner (System.in); String Words; while (cin .hasNext ()) {Words = Cin. Nextline (); ;