Ich war in letzter Zeit ziemlich untätig und habe mir Zeit genommen, um einige technische Java -Anwendungen zu überprüfen.
Ich habe heute nichts zu tun. Basierend auf dem UDP -Protokoll habe ich ein sehr einfaches Chatroom -Programm geschrieben.
In meiner aktuellen Arbeit werden Sockets selten verwendet, was auch ein einfacher Speicher der Java -Netzwerkprogrammierung ist.
Schauen wir uns den Effekt an:
Die Auswirkung der Implementierung kann als sehr, sehr einfach bezeichnet werden, aber Sie können immer noch einfach ein Implementierungsprinzip sehen.
Benutzer von "Chat Room 001", Xiaohong und Xiaolu unterhielten sich miteinander um ein paar Worte, und Xiaohei von "Chat Room 002" ignorierte ihn und war einsam.
Schauen Sie sich die Code -Implementierung an:
1. Die Implementierung des Nachrichtenservers ist zunächst die Funktion sehr einfach:
• Registrieren Sie die Informationen des Kunden (in welchem Chatraum Sie eingegeben haben usw.);
• Konstruktieren Sie das Objekt des UDP -Protokolls, um Nachrichten zu akzeptieren, die von jedem Client gesendet werden.
• Analysieren Sie den Nachrichteninhalt und geben Sie die Chat -Informationen im entsprechenden Chatraum an jeden Client zurück.
Paket com.tsr.simplechat.receive_server; import java.io.ioxception; import Java.net.datagrampacket; import Java.net.datagramsocket; importieren java.net.socketException; import. com.tsr.simplechat.bean.messageEntity; import com.tsr.simplechat.client.chatclient; // Chat Server Public Class Chatserver erweitert Thread {// Das Programm nimmt die Portnummer privat statischer endgültiger int port = 10000; // Die Nachricht akzeptiert Socket -Objekt private statische Datagramsocket Server = null; // Wörterbuchobjekt (Schlüssel: Chatroom -ID, Wert: Die Menge der Kundenbenutzer unter diesem Chatraum); private statische Hashmap <String, ArrayList <chatClient >> Gruppen = new HashMap <String, ArrayList <chatClient >> (); // Konstruktor public chatServer () {try {// Die Nachricht akzeptiert die Konstruktinitialisierung des Socket -Objektsservers = new DatagramSocket (Port); } catch (socketException e) {e.printstacktrace (); }} // Registrieren Sie einen neuen Login -Benutzer im Chatroom Public Static Void Logingroup (String GroupID, Chatclient Client) {// Alle Online -Benutzer des Chatraums über die Chatroom ArrayList <Chatchclient> clients = Groups.get (Groupid) erhalten; if (Clients == null) {Clients = new ArrayList <Chatchclient> (); } // Registrieren Sie die Benutzer, die diesmal den Chatraum eingeben. Clients.add (Client); // Chat Room Information Groups.put (GroupID, Clients) aktualisieren; } // message @Override public void run () {while (true) {forderungsemessage (); }} private void empfängere () {// udp packet byte [] buf = new byte [1024]; DataGrampacket packet = new DataGrampacket (buf, buf.length); while (true) {try {// paket server akzeptieren.receive (paket); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } // Das Datenpaket analysieren und Chat -Informationen erhalten String content = new String (packet.getData (), 0, paket.getLength ()); // JSON-Daten über das Paket von Drittanbietern analysieren GSON GSON = New GSON (); MessageEntity me = gson.fromjson (Inhalt, messageEntity.class); // den Nachrichteninhalt analysieren und alle Online -Benutzer des Chatraums über die Chatroom -ID -ID -ArrayList <Chatclient> Clients = Groups.get (me.getGroupid ()) erhalten; // Die empfangene Nachricht an jeden Benutzer des Chatraums für (ChatClient Client: Client) {Client.pushbackMessage (ME) zurückschieben; }}}}2. Das Kundenprogramm ist immer noch sehr einfach:
• Definieren Sie die Client -Chatroom -Oberfläche einfach.
• Konstruieren Sie die Nachricht senden Socket -Objekt.
• Holen Sie sich den Inhalt des Chat -Informationsfelds und senden Sie ihn an den Server.
Paket com.tsr.Implechat.client; import Java.awt.button; Import Java.awt.event; Import Java.awt.Frame; Import Java.awt.textarea; Import Java.awt.textfield; java.io.ioxception; import Java.net.datagrampacket; import Java.net.datagramsocket; Import Java.net.inetaddress; Import Java.net.sockeTexception; importieren java.net.unnownHostException; import com.tssimplechat.bean.messageEntity; com.tsr.simplechat.receive_server.chatserver; // Client Program Public Class ChatClient erweitert Frame {private statische endgültige lange Serialversionuid = 1L; // Chat Room ID Private String GroupID; // Client -Benutzername privater String -Clientname; // Client -Nachrichten senden Service Socket Private Datagramsocket msg_send; // Service Port Private Final int Port = 10000; // Server IP -Adresse private inetaddress ip; // Client Control TextField TF = neues Textfeld (20); TextArea ta = new textArea (); Schaltfläche Senden = neue Schaltfläche ("Senden"); // Client Constructor Public ChatClient (String GroupID, String ClientName) {Super ("Chat Room:" + GroupID + "/" + ClientName); this.clientname = clientName; this.groupid = GroupId; // Setzen Sie den Client -Schnittstellenstil add ("North", TF); add ("center", ta); add ("South", senden); setSize (250, 250); zeigen(); // Initialisieren init () für chatbezogene Server; // addWindowlistener überwachen (neuer Fensteradapter () {public void windowsClosing (windowEvent e) {// Schließen Sie die Nachricht zum Senden von Dienst msg_send.close (); // das Client -Programm dispose (); System.exit (0);}}); } // Initialisieren Sie private void init () {// Registrieren Sie die aktuellen Benutzer- und Chatrauminformationen an die Server -Chatserver.logingroup (Groupid, this); Versuchen Sie {// Initialisieren Sie die Nachricht, dass Socket -Objekt msg_send = new Datagramsocket () sendet; // Geben Sie den Nachrichtenserver an {ip = inetAddress.getByName ("127.0.0.1") an; } catch (unbekannteHostException e) {System.out.println ("unbekannteHostException .."); }} catch (socketException e) {System.out.println ("Socket Connection Exception .."); }} // Nachricht zum Senden von Schaltflächen Zeithörer public boolean Aktion (Ereignis EVT, Objekt arg) {if (evt.target.equals (send)) {try {// Inhaltsstring -Inhalt in Inhalt des Inhalts des Inhalts von Inhalten abrufen content = tf.getText (); // Nachricht senden send_message (Inhalt); // Chat -Box tf.setText (null) klären; } catch (Ausnahme ioe) {System.out.print (ioe.getMessage ()); }} return true; } // Meldung private void send_message (String -Inhalt) {// Nachrichtenformat (JSON -Format) String message = messageFormat (Inhalt); // die Nachricht in udp paket byte [] buf = message.getBytes () einbeziehen; DataGrampacket packet = new DataGrampacket (buf, buf.length, ip, port); Versuchen Sie {// Senden Sie die Nachricht msg_send.send (Paket); } catch (ioException e) {System.out.println ("io Exception .."); }} // Nachrichtenformatierung private String messageFormat (String -Inhalt) {stringBuffer buffer = new StringBuffer (); Buffer.Append ("{/" GroupId/":"). Anhänge ("/" "). append (GroupId) .Append ("/","); buffer.append ("/" userername/":/"). append (ClientName) .Append ("/", "); buffer.Append ("/"text/":/"). Append (Inhalt) .Append ("/"}"); return buffer.toString (); } // Erhalten Sie die neuesten Nachrichten über den aktuellen Chatraum vom Server (Callback ..) public void radbackMessage (MessageEntity me) {ta.Append (me.getUnername () + ":" + me.getText ()); ta.Append ("/n"); }} 3. Message Entity Class <BR /> Es wird hauptsächlich verwendet, um Nachrichten in Objekte zu integrieren, darunter: Chatroom -ID, Spitzname des Nachrichtensenders und Nachrichteninhalt. Verwenden Sie das JSON -Format, um zu analysieren.
Paket com.tsr.Implechat.bean; // Message Entity öffentliche Klasse MessageEntity {private String GroupID; privater String -Benutzername; privater Stringtext; public String getGroupid () {return GroupId; } public void setGroupId (String GroupId) {this.groupid = GroupId; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } public string getText () {return text; } public void setText (String text) {this.text = text; }}4. OK, es wird hier im Grunde genommen gemacht und erstelle eine Testklasse.
• Schalten Sie den Nachrichtenserver ein.
• Öffnen Sie drei Kunden, von denen zwei "Chatroom 001" und der andere "Chatroom 002" eingeben.
import com.tsr.simplechat.client.chatclient; import com.tsr.simplechat.receive_server.chatserver; public class test {public static void main (String [] args) {chatserver r = neuer chatserver (); R.Start (); ChatClient C1 = neuer ChatClient ("001", "Little Red"); ChatClient C2 = New ChatClient ("001", "Little Green"); ChatClient C3 = New ChatClient ("002", "Little Black"); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.