J'ai été assez inactif récemment et j'ai pris le temps de revoir certaines applications techniques Java.
Je n'ai rien à faire aujourd'hui. Sur la base du protocole UDP, j'ai écrit un programme de salle de chat très simple.
Dans mon travail actuel, les sockets sont rarement utilisés, ce qui est également une mémoire simple de la programmation réseau Java.
Jetons un coup d'œil à l'effet:
L'effet de la mise en œuvre peut être considéré comme très, très simple, mais vous pouvez toujours voir un principe de mise en œuvre.
Les utilisateurs de "Chat Room 001", Xiaohong et Xiaolu, ont discuté les uns avec les autres pour quelques mots, et Xiaohei de "Chat Room 002" l'a ignoré et était seul.
Jetez un œil à l'implémentation du code:
1. Tout d'abord, l'implémentation du serveur de messages, la fonction est très simple:
• Enregistrez les informations du client (la salle de chat que vous avez saisie, etc.);
• Construire l'objet de socket protocole UDP pour accepter les messages envoyés par chaque client;
• Analyser le contenu du message et repousser les informations de chat à chaque client dans la salle de chat correspondante;
package com.tsr.simplechat.receive_server; import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.socketxception; import java.util.arraylist; import java.util.hashmap; import com.google.gson.gson; com.tsr.simplechat.bean.sessageEntity; import com.tsr.simplechat.client.chatClient; // Chat Server classe publique ChatServer étend Thread {// Le programme occupe le numéro de port Static Final int Port = 10000; // Le message accepte l'objet Socket Private Static DatagramSocket Server = NULL; // Objet de dictionnaire (clé: ID de salle de chat, valeur: l'ensemble des utilisateurs du client dans cette salle de chat); STATIC STATIQUE PRIVÉ <String, ArrayList <ShatClient >> GROUPS = new HashMap <String, ArrayList <ShatClient >> (); // Constructor public ChatServer () {try {// Le message accepte l'initialisation de la construction de Socket Object Server = new DatagramSocket (port); } catch (socketException e) {e.printStackTrace (); }} // Enregistrez un nouvel utilisateur de connexion dans la salle de chat public static void lobingroup (String GroupId, chatClient client) {// Obtenez tous les utilisateurs en ligne de la salle de chat via la salle de chat ArrayList <ShatClient> Clients = GroupS.get (GroupID); if (clients == null) {clients = new ArrayList <ShatClient> (); } // Enregistrer les utilisateurs qui entrent dans la salle de chat cette fois clients.add (client); // Mettre à jour les groupes d'informations de salle de chat.put (groupId, clients); } // Recevoir Message @Override public void run () {while (true) {receiveMessage (); }} private void receiveMessage () {// udp paquet octet [] buf = new octet [1024]; Datagrampacket Packet = new Datagrampacket (buf, buf.length); while (true) {try {// accepter packet server.receive (paquet); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); } // Analyser le paquet de données et obtenir des informations de chat Contenu String = new String (packet.getData (), 0, packet.getLength ()); // analyse les données JSON via un package tiers gson gson = new gson (); Messageentity me = gson.fromjson (contenu, messageNity.class); // Analyser le contenu du message et obtenir tous les utilisateurs en ligne de la salle de chat via la salle de chat ID ArrayList <CatClient> Clients = GroupS.get (me.getGroupId ()); // repoussez le message reçu à chaque utilisateur de la salle de chat pour (ChatClient Client: Clients) {client.pushBackMessage (ME); }}}}2. Le programme client est toujours très simple:
• Définissez de manière simplifier l'interface de la salle de chat client.
• Construisez l'objet de socket Envoyer un message.
• Obtenez le contenu de la zone d'informations de chat et envoyez-les au serveur.
package com.tsr.simplechat.client; import java.awt.button; import java.awt.event; import java.awt.frame; import java.awt.textarea; import java.awt.textfield; java.io.ioException; import java.net.datagrampacket; import java.net.datagramsocket; importer java.net.inetaddress; import java.net.socketexception; import java.net.unknownhostexception; import com.tsr.simplechat.bean.mesageEntity; importation; com.tsr.simplechat.receive_server.chatserver; // CLATION CLASS PUBLIC PUBLICE CHATCILIT EXTENDE FRAMER {private static final long SerialVersionUID = 1l; // Chat Room ID private String GroupID; // Client nom d'utilisateur Private String ClientName; // Message client Envoi du socket de service privé datagramsocket msg_send; // Service Port privé fin Final Port = 10000; // Adresse IP de serveur Private InetAddress IP; // Client Control TextField TF = new TextField (20); TextArea ta = new TextArea (); Button Send = new Button ("Send"); // Client Constructor public ChatClient (String GroupId, String ClientName) {super ("Chat Room:" + GroupID + "/" + ClientName); this.clientName = clientName; this.groupId = grouped; // Définissez le style d'interface client Add ("North", TF); Ajouter ("Centre", TA); Ajouter ("Sud", envoyer); setSize (250, 250); montrer(); // initialiser init () pour les serveurs liés au chat; // Monitor addWindowListener (new WindowAdapter () {public void windowClosing (WindowEvent e) {// Fermez le service d'envoi de message msg_send.close (); // ferme le programme client dissose (); system.exit (0);}}); } // Initialize private void init () {// Enregistrez les informations actuelles de l'utilisateur et de la salle de chat sur le serveur ChatServer.Logingroup (GroupId, This); essayez {// initialiser le message Envoi de l'objet Socket msg_send = new DatagramSocket (); // Spécifiez le serveur de messages try {ip = inetAddress.getByName ("127.0.0.1"); } catch (UnknownHostException e) {System.out.println ("UnknownHostException .."); }} catch (socketException e) {System.out.println ("exception de connexion socket .."); }} // Message Envoi du bouton Time Écoute publique Boolean Action (Event EVT, objet arg) {if (evt.target.equals (envoyage)) {try {// Get Input Content String Content = tf.getText (); // Envoyer un message Send_Message (contenu); // Effacer la boîte de chat tf.seTText (null); } catch (exception ioe) {System.out.print (ioe.getMessage ()); }} return true; } // Envoyer le message private void send_message (String Content) {// Message Format (JSON Format) String Message = MessageFormat (Content); // résumer le message dans le paquet UDP Byte [] buf = message.getBytes (); Datagrampacket Packet = new Datagrampacket (buf, buf.length, ip, port); essayez {// envoyer le message msg_send.send (paquet); } catch (ioException e) {System.out.println ("IO Exception .."); }} // Formatage de messages Message privé MessageFormat (String Content) {StringBuffer Buffer = new StringBuffer (); Buffer.APPEND ("{/" GroupID / ":"). APPEND ("/" "). APPEND (GroupID) .APPEND (" / ","); Buffer.APPEND ("/" Username / ": /"). APPEND (CLIENTNAME) .APPEND ("/", "); Buffer.APPEND (" / "Text /": / "). A SPEND (Contenu) .Apnd (" / "}"); retour tamper.toString (); } // Obtenez les dernières nouvelles de la salle de chat actuelle du serveur (rappel ..) public void PushbackMessage (Messageentity me) {ta.append (me.getUserName () + ":" + me.getText ()); TA.APPEND ("/ n"); }} 3. Utilisez le format JSON pour analyser.
package com.tsr.simplechat.bean; // Entité du message classe publique MessageEntity {private String GroupID; Nom d'utilisateur de chaîne privée; texte de chaîne privé; 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 (String Text) {this.text = text; }}4. OK, cela se fait essentiellement ici et créez une classe de test.
• Activez le serveur de messages.
• Ouvrez trois clients, dont deux entrent "Chat Room 001" et l'autre entrent "Chat Room 002".
import com.tsr.simplechat.client.chatclient; import com.tsr.simplechat.receive_server.chatserver; public class test {public static void main (string [] args) {ChatServer r = new Chatserver (); R.Start (); ChatClient C1 = new ChatClient ("001", "Little Red"); ChatClient C2 = new ChatClient ("001", "Little Green"); ChatClient C3 = new ChatClient ("002", "Little Black"); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.