Introducción de clase Java relacionada
Datagramsocket
public class DatagramSocket extends Object
Esta clase representa un socket utilizado para enviar y recibir paquetes de datagrama.
Los sockets de datagrama son los puntos de envío o recepción de los servicios de entrega de paquetes. Cada paquete enviado o recibido en un socket de datagrama se aborda y enruta por separado. Múltiples paquetes enviados de una máquina a otra pueden elegir diferentes rutas o pueden llegar en diferentes pedidos.
El envío de transmisión UDP siempre está habilitado en DataGramsocket. Para recibir paquetes de transmisión, DatagramSocket debe estar vinculado a una dirección comodín. En algunas implementaciones, los paquetes de transmisión también se pueden recibir cuando se unen a una dirección más específica.
Los datos se pueden enviar y recibir a través del envío y la recepción de datagramsocket.
public void receive(DatagramPacket p) throws IOException
Reciba paquetes de datagrama de este socket. Cuando este método devuelve, el búfer de DataGrampacket se llena con los datos recibidos. El paquete de datagrama también contiene la dirección IP del remitente y el número de puerto en la máquina del remitente.
Este método bloquea hasta que se recibe el datagrama. El campo de longitud del objeto de paquete de datagrama contiene la longitud de la información recibida. Si la información es más larga que la longitud del paquete, la información se acortará
Si existe un gerente de seguridad y el método CheckAcept del Administrador de seguridad no permite la operación de recepción, no se puede recibir el paquete.
parámetro:
P-el DataGrampacket para colocar los datos entrantes.
Tirar:
IOException: si se produce un error de E/S.
SocketTimeOutException: si SetSotimeOut se llamaba anteriormente y el valor de tiempo de espera ha expirado.
PortUnReachableException: puede lanzar cuando el enchufe está conectado al objetivo inalcanzable actualmente. Tenga en cuenta que no hay garantía de que se lanzará la excepción.
IlegalblockingmodeException: si este socket tiene un canal asociado y el canal está en modo sin bloqueo.
public void send(DatagramPacket p) throws IOException
Enviar paquetes de datagrama desde este socket. DataGrampacket contiene información que indica: los datos que se enviarán, su longitud, la dirección IP del host remoto y el número de puerto del host remoto
Si existe un administrador de seguridad y el socket no está conectado actualmente a la dirección remota, este método primero realiza algunas verificaciones de seguridad. Primero, si p.getAddress (). IsMultiCastAddress () es verdadero, este método llama al método CheckMulticast del administrador de seguridad con p.getAddress () como el parámetro. Si el valor de la expresión es falso, este método se utiliza para llamar al método de control de verificación del administrador de seguridad con p.getAddress (). Gethostaddress () y p.getport () como parámetros. Si no está permitida la operación, cada llamada al método del administrador de seguridad dará como resultado una Ejecución Security.
parámetro:
P-DataGrampacket para ser enviado.
Tirar:
IOException: si se produce un error de E/S.
SecurityException: si existe el gerente de seguridad y sus métodos de checkmulticast o checkconnect no permiten el envío.
PortUnReachableException: puede lanzar cuando el enchufe está conectado al objetivo inalcanzable actualmente. Tenga en cuenta que no hay garantía de que se lanzará la excepción.
IlegalblockingmodeException: si este socket tiene un canal asociado y el canal está en modo sin bloqueo.
DataGrampacket
public final class DatagramPacket extends Object
Este tipo representa paquetes de datagrama UDP, que se utilizan para implementar servicios de entrega de paquetes sin conexión
Método de construcción:
DatagramPacket(byte[]buf,intlength)
Construya DataGrampacket para recibir paquetes de datos de longitud
DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)
Construir paquetes de datagrama para enviar paquetes de longitud al número de puerto especificado en el host especificado
Ejemplo del sistema de chat de grupo UDP
UDP está conectado sin conexiones. El chat grupal es enviar datos a la dirección de transmisión (dirección de transmisión), para que todos reciban un mensaje; Usando el método de subproceso, inicie un subproceso del remitente y el hilo del receptor, el remitente lee la entrada del teclado como salida, el receptor lee la información de entrada y la muestra.
Remitente
Udpsender.java
paquete cn.xidian.socket; import java.io.bufferedReader; import java.io.ioexception; import java.io.inputstreamreader; import java.net.dataGrampacket; import java.net.datagramsocket; import java.net.inetadDress; public class Udpsender extiende hilo de hilo {@Override (intentante (intent {// Crear servicio UDP datagramSocket Socket = new DataGramSocket (); // Prepare el paquete de datos para enviar // leer la entrada del sistema de entrada BuffEdreader en = new BufferedReader (new InputStreamreader (System.in)); String Line = NULL; while ((Line = in.Readline ())! = Null) {// I Hice la prueba y escribió la dirección local. El chat grupal necesita escribir la dirección de transmisión, por ejemplo: 192.168.137.255DataGrampacket data = new DataGrampacket (Line.getBytes (), Line.getBytes (). Long Longitud, inetaddress.getByName ("127.0.0.1"), 9090); // envíe datos de datos (datos);} SocketSocket.Close ();} Catch (IOException e) {E.PrintStackTrace ();}}}Receptor
Udprreceiver.java
paquete cn.xidian.socket; import java.io.ioException; import java.net.dataGrampacket; import java.net.datagramsocket; public class UDPRECEIVER extiende Thread {@Override public void run () {try {// crea UDP Service y escucha a porton datagramsocket = new datagramsocket (909090); byte [] temp = new byte [1024]; dataGrampacket data = new dataGrampacket (temp, temp.length); boolean flag = true; while (flag) {Socket.Receive (data); // emitir la información relacionada con el remitente StringDdress = data.getaddress (). GethoStaddress (); String SenderHostName = data.getAddress (). gethostName (); system.out.println (senderHostName+"("+senderAdDress+")"+"dice:"+new String (temp, 0, data.getLength ()));} // Cierre el recurso ShoCket.Close ();} Catch (IOException) {E.PrintststArMétodo principal
Udpmain.java
paquete cn.xidian.socket; public class Udpmain {public static void main (string [] args) {// iniciar UDPRECEIVER SURT UDPRECEIVER receper = new UDPRECEIVER (); receptor.start (); // Inicio UDPSender Thread UDPSender Sender = Newpsender (); Sender.start ();}}}}}}Resultados de las pruebas
La parte de entrada lee la entrada del teclado como salida, el receptor recibe el mensaje y muestra la IP y el nombre de host del remitente.
Resumir
Lo anterior es todo el contenido de este artículo sobre la programación de Java usando UDP para crear ejemplos de código de sistema de chat grupal. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!