J'ai récemment commencé un projet où il y a un besoin de communication Web en ligne. Je n'ai pas écrit de code depuis longtemps et je ne suis pas familier. J'ai donc d'abord écrit une démo et je l'ai pratiquée et partagée sur la plate-forme du réseau Wulin pour faire un enregistrement afin qu'il puisse être utilisé avec tout le monde.
Permettez-moi d'abord de vous dire les étapes de mise en œuvre:
1. Utilisez le composant AWT et le socket pour implémenter un simple client unique pour envoyer en continu des messages au serveur;
2. Combiné avec des threads, réalisez la connexion multi-client au serveur pour envoyer des messages;
3. Implémentez les messages clients de transfert de serveur à tous les clients et affichez-les sur le client en même temps;
4. Changez l'interface de fenêtre générée par le composant AWT en l'interface affichée par JSP ou HTML frontal, et modifiez le client implémenté par Java Socket en implémentation de technologie frontale.
Ici, nous implémentons d'abord la fonction simple de la première étape, la difficulté est:
1. Je n'ai jamais utilisé le composant AWT et je n'ai jamais utilisé d'événements d'écoute liés à Java;
2. Je n'ai pas utilisé de sockets pendant de longues périodes pour interagir entre le client et le serveur, et je n'ai pas vraiment développé la structure CSS.
Le code pour implémenter la fonction est le suivant:
Client:
package chat.chat; import java.awt.borderLayout; import java.awt.frame; Importer java.awt.TextArea; import java.awt.textfield; import java.awt.event.actionEvent; import java.awt.event.actionListener; Importer java.awt.event.windowAdapter; import java.awt.event.windowEvent; import java.io.dataOutputStream; Importer java.io.ioException; import java.net.socket; import java.net.unknownhostException; / ** * Client de chat en ligne 1. Générez l'interface de la fenêtre graphique Aperçu 2. Ajoutez un événement proche au contour 3. Ajoutez une zone de saisie et une zone d'affichage de contenu au contour 4. Ajoutez un événement de retour du chariot pour la zone de saisie * 5. Créez une connexion de serveur et envoyez des données * * @Author Tuzongxun123 * * * / public class ChatClient étend cadre {// user ère de saisie TextField private // zone d'affichage de contenu Private TextArea Taste = new TextArea (); Pobite privée socket = null; // Data Output Stream Private DataOutStream DataOutputStream = NULL; public static void main (string [] args) {new ChatClient (). launcFrame (); } / ** * Créez une fenêtre graphique simple * * @author: tuzongxun * @title: launcframe * @param * @return void * @Date 18 mai 2016 9:57:00 AM * @throws * / public void launcframe () {setLocation (300, 200); this.setSize (200, 400); Add (tftxt, borderlayout.south); ajouter (tarea, borderlayout.north); paquet(); // Écoutez l'événement de clôture de la fenêtre d'interface graphique this.addwindowListener (new WindowAdapter () {@Override public void windowClating (windowEvent e) {System.exit (0); disconnect ();}}); tftxt.addactionListener (new tfister ()); setVisible (true); connecter(); } / ** * Connectez-vous au serveur * * @author: tuzongxun * @title: connect * @param * @return void * @Date 18 mai 2016 9:56:49 AM * @throws * / public void connect () {try {// Créer un nouveau socket de connexion du serveur = new socket ("127.0.1", 8888); // Obtenir le flux de sortie du client DataOutStream = new DataOutputStream (socket.getOutputStream ()); System.out.println ("Connecter au serveur"); } catch (inconnuhostException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} / ** * Fermer les ressources du client * * @Author: Tuzongxun * @Title: Disconnect * @param * @return void * @Date 18 mai 2016 9:57:46 AM * @throws * / public void déconnect () {try {dataoutputStream.close (); socket.close (); } catch (ioException e) {e.printStackTrace (); }} / ** * Envoyez un message au serveur * * @author: tuzongxun * @title: sendMessage * @param @param text * @return void * @Date le 18 mai 2016 9:57:56 AM * @throws * / private void SendMessage (String Text) {try {dataUtStream.WriteUtf (text); dataOutputStream.flush (); } catch (ioException e1) {e1.printStackTrace (); }} / ** * Zone d'entrée de fenêtre graphique pour écouter l'événement de retour de voiture * * @author tuzongxun123 * * / classe privée tflister implémente ActionListener {@Override public void ActionPerformed (actionEvent e) {String text = tftxt.getText (). Trim (); taxa.setText (texte); tftxt.setText (""); // Envoi des données au serveur SendMessage (texte); }}}Serveur:
package chat.chat; import java.io.datainputStream; Importer java.io.eofException; Importer java.io.ioException; import java.net.bindexception; import java.net.serversocket; import java.net.socket; / ** * Java utilise des composants Socket et AWT pour simplement implémenter la fonction de chat en ligne. Le serveur peut réaliser que le serveur envoie en continu des messages au serveur après avoir connecté un client * mais ne prend pas en charge plusieurs clients pour se connecter en même temps. La raison en est qu'après avoir obtenu la connexion client dans le code, il continuera d'écouter les entrées du client en boucle, provoquant un blocage * afin que le serveur ne puisse pas écouter un autre client deux fois. Si vous souhaitez l'implémenter, vous devez utiliser Asynchronous ou Multithread * * @author Tuzongxun123 * * / classe publique Chatserver {public static void main (String [] args) {// Si le serveur est démarré avec succès booléen isStart = false; // socket serversocket ss = null; // socket client socket socket = null; // Server Lire le flux de données du client Stream DatainputStream dataRainputStream = null; essayez {// start Server ss = new serversocket (8888); } catch (bindException e) {System.out.println ("Le port est déjà utilisé"); // fermer le programme System.exit (0); } catch (exception e) {e.printStackTrace (); } essayez {isStart = true; while (isStart) {boolean isConnect = false; // démarrer le socket d'écoute = ss.accept (); System.out.println ("One Client Connect"); isConnect = true; while (isConnect) {// Obtenez le flux de saisie du client datainputStream = new DataRainputStream (socket.getInputStream ()); // Lire les données passées par le Client String Message = dataAnputStream.ReadUtf (); System.out.println ("Le client dit:" + message); }}} catch (eofException e) {System.out.println ("Client fermé!"); } catch (exception e) {e.printStackTrace (); } Enfin {// Fermez la ressource connexe Try {DatAnputStream.Close (); socket.close (); } catch (ioException e) {e.printStackTrace (); }}}}Ce qui précède est les connaissances pertinentes sur Java Socket implémentant une fonction de chat en ligne simple (i) introduite par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!