He estado bastante inactivo recientemente y me he tomado el tiempo para revisar algunas aplicaciones técnicas de Java.
No tengo nada que hacer hoy. Basado en el protocolo UDP, escribí un programa de sala de chat muy simple.
En mi trabajo actual, los enchufes rara vez se usan, lo que también es un recuerdo simple de la programación de redes de Java.
Echemos un vistazo al efecto:
Se puede decir que el efecto de la implementación es muy, muy simple, pero aún puede simplemente ver un principio de implementación.
Los usuarios de "Sala de chat 001", Xiaohong y Xiaolu conversaron entre ellos para algunas palabras, y Xiaohei de "Chat Room 002" lo ignoró y estaba solo.
Eche un vistazo a la implementación del código:
1. En primer lugar, la implementación del servidor de mensajes, la función es muy simple:
• Registre la información del cliente (qué sala de chat que ingresó, etc.);
• Construya el objeto de socket de protocolo UDP para aceptar mensajes enviados por cada cliente;
• Analice el contenido del mensaje y envíe la información de chat a cada cliente en la sala de chat correspondiente;
paquete com.tsr.simplechat.receive_server; import java.io.ioexception; import java.net.datagrampacket; import java.net.dataGramsocket; import java.net.socketexception; import java.util.arraylist; import java.util.hashmap; import.google.gson; com.tsr.simplechat.bean.messageEntity; import com.tsr.sr.simplechat.client.chatclient; // Chat Server Public Class ChatServer extiende el subproceso {// El programa ocupa el número de puerto privado estático final int Port = 10000; // El mensaje acepta Socket Object static static datagramsocket servidor = null; // Objeto del diccionario (clave: ID de sala de chat, valor: el conjunto de usuarios del cliente en esta sala de chat); HASHMAP SSTÁTICO PRIVADO <String, ArrayList <ChatClient>> grupos = new HashMap <String, ArrayList <CHATCLIENT> (); // Constructor public chatserver () {try {// El mensaje acepta la inicialización de constructo del servidor de objetos de Socket = new DataGramSocket (puerto); } Catch (SocketException e) {E.PrintStackTrace (); }} // Registre un nuevo usuario de inicio de sesión en la sala de chat public static void logingroup (String groupId, chatclient cliente) {// Obtenga a todos los usuarios en línea de la sala de chat a través de la sala de chat arraylist <ChatClient> clientes = groups.get (groupId); if (clientes == null) {clientes = new ArrayList <CHATCLIENT> (); } // registra a los usuarios que ingresan a la sala de chat esta vez clientes. // actualizar grupos de información de la sala de chats.put (GroupId, clientes); } // recibir mensaje @Override public void run () {while (true) {recibeiveMessage (); }} private void recibeMessage () {// UDP PACKET BYTE [] buf = new Byte [1024]; Paquete de dataGrampacket = nuevo DataGrampacket (buf, buf.length); while (true) {try {// Aceptar Packet Server.Receive (Packet); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); } // analizar el paquete de datos y obtener información de chat String content = new String (paquete.getData (), 0, paquete.getLength ()); // analizar datos JSON a través del paquete de terceros GSON GSON = new Gson (); MessageEntity me = gson.fromjson (content, messageEntity.class); // analiza el contenido del mensaje y obtenga a todos los usuarios en línea de la sala de chat a través de la ID de la sala de chat ArrayList <ChatClient> clientes = groups.get (me.getgroupid ()); // Empuje el mensaje recibido a cada usuario de la sala de chat para (ChatClient Client: Clients) {Client.PushbackMessage (ME); }}}}2. El programa del cliente sigue siendo muy simple:
• Defina simplamente la interfaz de la sala de chat del cliente.
• Construya el mensaje Enviar el objeto Socket.
• Obtenga el contenido del cuadro de información de chat y envíelo al servidor.
paquete com.tsr.simplechat.client; import java.awt.button; import java.awt.event; import java.awt.frame; import java.awt.textarea; import java.awt.textfield; import java.awt.event.windowadapter; import java.awt.winent; import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetaddress; import java.net.socketexception; import java.net.nunknownHostexception; import Com.tsr.simplechat.bean.messageEntity; import com.tsr.simplechat.receive_server.chatserver; // Programa de cliente Public Class ChatClient extiende el marco {Private Static final Long SerialVersionUid = 1l; // ID de la sala de chat GroupId de cadena privada; // Nombre de usuario del cliente Cadena privada ClientName; // Mensaje del cliente Servicio de servicio Socket Socket Private DataGramsocket msg_send; // Puerto de servicio Private Final Int Port = 10000; // Dirección IP del servidor Inetaddress IP; // Control del cliente Textfield tf = new TextField (20); TextAREA TA = new TextAREA (); Botón enviar = botón nuevo ("enviar"); // Constructor Client Public ChatClient (String GroupId, String ClientName) {super ("Room de chat:" + GroupId + "/" + ClientName); this.clientName = ClientName; this.groupId = GroupId; // establecer el estilo de interfaz de cliente ADD ("Norte", TF); agregar ("centro", ta); agregar ("sur", enviar); setSize (250, 250); espectáculo(); // Inicializar init () para servidores relacionados con el chat; // monitor addwindowlistener (new WindowAdapter () {public void WindowClosing (WindowsEvent E) {// Cierre el servicio de envío de mensajes msg_send.close (); // cerrar el programa del cliente deshacerse (); system.exit (0);}}); } // Inicializar private void init () {// Registre la información actual del usuario y la sala de chat en el servidor chatserver.logingroup (groupId, this); Pruebe {// Inicializar el mensaje Enviando el objeto Socket msg_send = new DataGramsocket (); // Especifique el servidor de mensajes Try {ip = inetaddress.getByName ("127.0.0.1"); } Catch (desconocidoHostException e) {System.out.println ("desconocidohostException .."); }} Catch (SocketException e) {System.out.println ("Excepción de conexión de socket .."); }} // Mensaje de envío del botón Hora de escucha Public Boolean Action (Event Evt, Object arg) {if (evt.target.equals (send)) {try {// Obtener contenido de entrada String content = tf.gettext (); // Enviar mensaje send_message (contenido); // borrar el cuadro de chat tf.settext (nulo); } Catch (Exception IOE) {System.out.print (ioe.getMessage ()); }} return verdadero; } // Enviar mensaje privado void send_message (contenido de cadena) {// format de mensajes (formato json) string mensaje = mensajeformat (content); // Encapsula el mensaje en el byte de paquete UDP [] buf = message.getBytes (); Paquete de dataGrampacket = nuevo DataGrampacket (BUF, BUF.Length, IP, Port); intente {// Enviar el mensaje msg_send.send (paquete); } catch (ioException e) {System.out.println ("Io Exception .."); }} // Formateo de mensajes String private MessageFormat (String Content) {StringBuffer Buffer = new StringBuffer (); buffer.append ("{/" groupid/":"). append ("/" "). append (groupId) .append ("/","); buffer.append ("/" username/":/"). append (clientName) .Append ("/", "); buffer.append ("/"text/":/"). append (content) .Append ("/"}"); return buffer.ToString (); } // Obtenga las últimas noticias de la sala de chat actual desde el servidor (devolución de llamada ...) public void PushbackMessage (MessageEntity ME) {ta.append (me.getusername () + ":" + me.gettext ()); ta.append ("/n"); }} 3. Clase de entidad de mensaje <Br /> Se usa principalmente para encapsular los mensajes en objetos, que incluyen: ID de sala de chat, apodo del remitente del mensaje y contenido de mensajes. Use el formato JSON para analizar.
paquete com.tsr.simplechat.bean; // Message Entity public class MessageEntity {private String groupId; nombre de usuario de cadena privada; texto de cadena privada; public String getGroupId () {return groupId; } public void setGroupId (String GroupId) {this.groupId = GroupId; } public String getUsername () {return UserName; } public void setUsername (String UserName) {this.Username = username; } public String getText () {return text; } public void setText (texto de cadena) {this.text = text; }}4. Ok, básicamente se hace aquí y crea una clase de prueba.
• Encienda el servidor de mensajes.
• Abra tres clientes, dos de los cuales ingresan a la "sala de chat 001" y la otra ingresan a la "sala de chat 002".
import com.tsr.simplechat.client.chatclient; import Com.tsr.sr. R.Start (); ChatClient c1 = nuevo chatClient ("001", "pequeño rojo"); ChatClient C2 = nuevo chatClient ("001", "pequeño verde"); ChatClient C3 = nuevo chatClient ("002", "pequeño negro"); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.