Este artículo explica el código detallado de programación de socket Java para implementar un servicio de saludo simple para su referencia. El contenido específico es el siguiente
Lado del servidor:
Implementando el servicio Hello más simple, imprima la dirección IP del cliente a la consola, envíe una cadena de caracteres (hola, socket Java) a cualquier cliente conectado y cierre la conexión con el cliente. Espere a que llegue la solicitud de conexión del próximo cliente.
Cliente:
Implemente un socket más simple para conectarse al servidor Hello, acepta datos de bytes enviados por el servidor e imprime el contenido en la consola.
Consejos clave:
Debido a que Java proporciona una gran cantidad de API de transmisión de entrada y salida, muchos principiantes están expuestos a la programación de socket de Java, y debido a que carecen de comprensión de la naturaleza de la comunicación de bytes de red, aceptan directamente las secuencias de bytes de socket por readline (). Sin embargo, debido a que la parte de envío no envía /R /N, los datos no se pueden leer. Este es el error más común. Algunos otros errores comunes incluyen no inicializar el búfer de aceptación, lo que resulta en caracteres confusos y no se vuelven a montar de acuerdo con el número de bytes recibidos por lectura, lo que resulta en una excepción a los datos recibidos. Entonces, el código demuestra lo que envía byte y aceptación por byte. Este es un concepto y principio muy importante en la programación de redes. Deje que el método de transmisión de entrada println () y la transmisión de salida readline () se vayan al infierno. No es que no sea fácil de usar, pero sugiero que no lo use porque eso obstaculizará su comprensión y comprensión de la esencia de la programación de redes. Además, me gustaría hacer una nota especial: a veces FLUSH () no es necesario a menos que use una transmisión de entrada y salida tamponada para leer y escribir bytes.
Código del lado del servidor:
paquete com.gloomyfish.socket.tutorial.Two; import java.io.dataOutputStream; import java.io.ioException; import java.net.serversocket; import java.net.socket; HELOSERVICE de clase pública extiende el hilo {Servidor de servidor privado Serversocket; public HelloService (int Port) lanza IOException {Serversocket = new Serversocket (puerto); } public void run () {try {while (true) {system.out.println ("Esperando el cliente en el puerto" + Serversocket.getLocalport ()); Socket Client = Serversocket.accept (); // Bloqueado y esperando el socket de ingresos System.out.println ("recién conectado a" + client.getRemotesocketAddress ()); DataOutputStream dos = new DataOutputStream (Client.getOutputStream ()); byte [] hola = "hola, socket java" .getBytes (); dos.write (hola, 0, hola.length); dos.close (); client.close (); }} catch (Exception e) {E.PrintStackTrace (); }} public static void main (string [] args) {try {HelloService Service = New HelloService (9999); servicio.Start (); } catch (ioException e) {E.PrintStackTrace (); }}} El servidor escucha en el puerto 9999 y espera la conexión, y utiliza Java Thread para lograr el inicio del lado del servidor.
El código del cliente es el siguiente:
paquete com.gloomyfish.socket.tutorial.Two; import java.io.datainputstream; import java.io.ioException; import java.net.InetSocketAddress; import java.net.socketaddress; import java.net.socketaddress; public class Helloclient {private int clientNumber; dirección privada de enchufeaddress; public Helloclient (int clientNum) {clientNum = clientNum; } public void setupClients (String ServerHostName, int Port) lanza IOException {dirección = nueva inetSocketAddress (servidorHostName, puerto); for (int i = 0; i <clientNumber; i ++) {system.out.println (); System.out.println ("Iniciar cliente No." + (i + 1)); Socket socket = new Socket (); socket.connect (dirección); DataInputStream BufferedReader = new DataInputStream (Socket.GetInputStream ()); byte [] cbuff = nuevo byte [256]; char [] charbuff = new Char [256]; int tamaño = 0; while ((size = bufferedReader.read (cbuff))> 0) {convertBytetochar (cbuff, charbuff, size); System.out.println (Charbuff); } bufferedReader.close (); socket.close (); }} private void convertBytetochar (byte [] cbuff, char [] charbuff, int size) {for (int i = 0; i <charbuff.length; i ++) {if (i <size) {charbuff [i] = (char) cbuff [i]; } else {charbuff [i] = ''; }}} public static void main (string [] args) {try {helloclient client = new Helloclient (10); Client.SetUpClients ("localhost", 9999); } catch (ioException e) {E.PrintStackTrace (); }}} Inicie 10 clientes para conectarse al lado del servidor, y después de recibir el saludo del servidor, el cliente cierra la conexión.
Consejo especial: asegúrese de inicializar el búfer Charbuff
Programa de ejecución de resultados:
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.