Cet article décrit la mise en œuvre de la salle de chat à socket basée sur le protocole TCP dans la programmation Java. Partagez-le pour votre référence, comme suit:
Ici, les prises de socket sont utilisées pour la programmation, ce qui accomplit la double communication entre le serveur et le client basé sur le service fiable TCP.
Côté serveur du serveur:
package com.han; import java.awt.continer; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.awt.event.windowadapter; import java.awt.event.windowevent; import java.io. javax.swing.jscrollpane; import javax.swing.jtextarea; import javax.swing.jtextfield; / ** * Ce programme implémente la partie de la programmation du serveur d'un programme TCP. * La programmation à l'aide de socket sockets est effectuée pour obtenir une double communication avec le client en fonction du service TCP fiable. * Voir le client de classe client dans ce package pour la programmation * @author han * * / @ suppresswarnings ("serial") public class Server étend JDialog {lecteur privé BufferedReader; écrivain privé de gravure; Server privé SERVERSOCKET; prise à douille privée; private jTextArea ta = new JTextArea (); JSCROLLPANE privé SP = nouveau jscrollPane (TA); private jTextfield tf = new JTextField (); Conteneur CC; Server public (titre de chaîne) {SettItle (title); addWindowListener (new WindowAdapter () {public void windowclosing (windowEvent we) {dissose (); // révoque toutes les ressources associées liées à Dialog System.exit (0); // quitte le programme normalement}}); cc = getContentPane (); setLayout (null); ta.setlinewrap (true); TA.SetEditable (false); SP.SetBounds (0,0,300,342); tf.setBounds (0,342 300,25); CC.ADD (SP); CC.ADD (TF); tf.addactionListener (new ActionListener () {public void ActionPerformed (ActionEvent e) {try {writer = new Printwriter (socket.getOutputStream (), true);} Catch (ioException e1) {// todo a auto-généré un bloc de catch e1.printStackTrace ();} écrivain.println (tf.GetText ()); TA.APPEND ("User1:" + tf.getText () + '/ n'); } void getServer () {try {server = new serversocket (8998); TA.APPEND ("Le socket serveur a été créé avec succès / n"); while (true) {ta.append ("en attente de connexion client / n"); socket = server.accept (); TA.APPEND ("Client Connected / N"); Reader = new BufferedReader (new InputStreamReader (socket.getInputStream ())); getClientMessage (); }} catch (exception e) {e.printStackTrace (); }} private void getClientMessage () {try {while (true) {string news = reader.readline (); if (news! = null) {ta.append ("user2:" + news + "/ n"); } else {ta.append ("user2 (client) déconnecté / n"); casser; }}} catch (ioException e) {// TODO Generated Catch Block E.PrintStackTrace (); } essayez {if (reader! = null) {reader.close (); }} catch (ioException e) {// TODO GÉNÉRATEUR AUTO GÉNÉRÉ BLOC E.PRINTSTACKTRACE (); } if (socket! = null) {try {socket.close (); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }}} public static void main (String [] args) {server user1 = new server ("user1"); user1.setBounds (0,0,300 400); user1.setResiSable (false); user1.setVisible (true); user1.getServer (); }}Client client:
package com.han; importer java.awt. *; import java.awt.event. *; import java.io. *; import java.net. *; import javax.swing. *; / ** * Ce programme implémente la partie de programmation client d'un programme TCP. * La programmation à l'aide de socket sockets est effectuée pour obtenir une double communication avec le serveur en fonction du service TCP fiable. * Voir la classe de serveur dans ce package pour la programmation du serveur * Il peut être exécuté sur différentes plates-formes et différentes machines, mais l'adresse IP écrite dans le code doit être modifiée à l'adresse IP de la machine exécutant le serveur du serveur. * @author han * * / @ suppressWarnings ("Serial") Le client de classe publique étend JDIALOG {lecteur privé BufferedReader; écrivain privé de gravure; prise à douille privée; private jTextArea ta = new JTextArea (); JSCROLLPANE privé SP = nouveau jscrollPane (TA); private jTextfield tf = new JTextField (); Conteneur CC; Client public (titre de chaîne) {SettItle (titre); addWindowListener (new WindowAdapter () {public void windowclosing (windowEvent we) {dissose (); // révoque toutes les ressources associées liées à Dialog System.exit (0); // quitte le programme normalement}}); cc = getContentPane (); setLayout (null); ta.setlinewrap (true); TA.SetEditable (false); SP.SetBounds (0,0,300,342); tf.setBounds (0,342 300,25); CC.ADD (SP); CC.ADD (TF); tf.AddActionListener (new ActionListener () {public void ActionPerformed (ActionEvent e) {writer.println (tf.getText ()); ta.append ("user2:" + tf.getText () + '/ n'); tf.settext ("");}}); } private void connect () {ta.append ("essayez de connecter / n"); try {socket = new socket ("192.168.1.3", 8998); } catch (UnknownHostException e) {// TODO Générations de capture générée par Auto E.PrintStackTrace (); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); } try {writer = new printwriter (socket.getOutputStream (), true); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); } ta.append ("Complétez la connexion / n"); } private void getClientMessage () {try {Reader = new BufferedReader (new InputStreamReader (socket.getInputStream ())); while (true) {String news = reader.readline (); if (news! = null) {ta.append ("user1:" + news + "/ n"); } else {ta.append ("user1 (serveur) a été déconnecté, et lorsque le serveur est reconnecté, redémarrez user2 (client) pour communication / n"); casser; }}} catch (ioException e) {// TODO GÉNÉRATEUR AUTO-GÉNÉRÉ BLOCK TA.APPEND ("User1 (Server) pour Communication / N"); e.printStackTrace (); } essayez {if (reader! = null) {reader.close (); }} catch (ioException e) {// TODO GÉNÉRATEUR AUTO GÉNÉRÉ BLOC E.PRINTSTACKTRACE (); } if (socket! = null) {try {socket.close (); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }}} public static void main (string [] args) {client user2 = new client ("user2"); user2.setBounds (0,0,300 400); user2.setVisible (true); user2.SetResiSable (false); user2.connect (); user2.getClientMessage (); }}Pour plus d'informations sur le contenu lié à Java, veuillez consulter les sujets de ce site: "Résumé des compétences de programmation Java Socket", "Résumé des compétences de fichier Java et d'opération de répertoire", "Tutorial sur la structure de données Java et l'algorithme", "Résumé de l'opération Java Dom Skills" et "Résumé des compétences en opération de cache Java"
J'espère que cet article sera utile à la programmation Java de tous.