Verwenden Sie Socket -Technologie, um Online -Chatraum und private Chat -Funktionen zu implementieren. Der spezifische Inhalt ist wie folgt
Lassen Sie uns ohne weiteres das Bild erhalten:
1. Chatroom -Gruppen -Chat -Seite
Kontaktliste für Online -Benutzer
Socket -Verbindungsseite
Private Chat -Seite
Projekteinführung
Implementieren Sie die Socket -Verbindung mit dem Server: Wenn jeder Client eine Verbindung zum Server herstellt, speichert der Server jeden angeschlossenen Socket in der Listensammlung.
Gruppen -Chat -Funktion: Wenn ein Benutzer eine Gruppen -Chat -Nachricht an den Server sendet, leitet der Server alle Informationen an alle verbundenen Clients in der Liste der Liste weiter.
Private Chat -Funktion: Nachdem der Benutzer private Chat -Informationen an den Server gesendet hat, sendet der Server eine Nachricht an eine Ziel -IP.
Zeigen Sie die Online -Kontaktliste an: Wenn sich ein neuer Benutzer erfolgreich anmeldet, sendet der Server die Online -Kontaktinformationen in Form einer JSON -Zeichenfolge an den Client, und der Client erhält die Online -Kontaktinformationen, indem sie die JSON -Zeichenfolge analysiert.
Passen Sie einen leistungsstarken Klassen -SocketEvent an: Der Client kommuniziert mit dem Server und speichert Daten über diese Klasse und verwendet dann das Fastjson -Tool, um das Klassenobjekt in eine JSON -Zeichenfolge für die Übertragung zu konvertieren.
öffentliche Klasse SocketEvent {private int type = 0; private String msg = ""; private String keyip = ""; // Taste IP Private String temporaryip = ""; // Temporary IP public SocketEvent () {} public int gettType () {return type; } public void setType (int type) {this.type = type; } public String getmsg () {return msg; } public void setmsg (String msg) {this.msg = msg; } public String getKeyip () {return keyip; } public void setKeyip (String keyip) {this.Keyip = keyIp; } public String GetTeMporaryIp () {return temporaryIp; } public void settemporaryip (String temporaryIp) {this.temporaryip = temporaryIp; }}Typ: Unterschreiben Sie, welche Art von Informationen derzeit gesendet wird. Die Server- und Client -Parsen -Daten werden verwendet, um zu bestimmen, zu welcher Art von Nachrichten gehört.
public static final int chat_private = 111; // Anweisung für private Chat Public statische endgültige int chat_group = 222; // Anweisung für Gruppen -Chat Public statische endgültige int socket_success = 333; // Anweisung für eine erfolgreiche Socketverbindung öffentliche statische endgültige int socket_fail = 444; // Anweisung für fehlgeschlagene Socket -Verbindung öffentliche statische endgültige int Connect_Success = 666; // Anweisung für eine erfolgreiche Socket -Verbindung Public static Final int Connect_Fail = 777; // Der Befehl für die Socket -Verbindung hat die öffentliche statische endgültige int login_arg = 888 fehlgeschlagen; // Der Socket empfängt den Befehl zur Unterzeichnung der Anmeldung des neuen Benutzer Public static Final Int Cancel_Arg = 999; // Der Befehl zur Unterzeichnung der Anmeldung des Benutzers Public Static Final INT new_client = 3332; // Der Befehl zur Unterzeichnung der Anmeldung des neuen Benutzer Public Static Final int All_Client = 3432; // Der Befehl zur Unterzeichnung der Anmeldung aller Online -Benutzer öffentliche statische endgültige int send_private = 5666; // Der Befehl zum Senden privater Chat -Nachrichten öffentliche statische endgültige int send_iplist = 6666; // Anweisung zum Senden eines protokollierten Benutzer-IP-Sammlung
Schlüssel: IP -Adresse des Client -Nachrichteninitiators
TemperaturIP: Temporäre IP -Adresse. Wenn es sich um einen Typ handelt, der ein privater Chat -Typ ist, repräsentiert diese IP die IP -Adresse des Zielkontakts.
Serversocket
1. Kundenverbindung empfangen
Socket SocketClient = server.accept ();
2. Schalten Sie den Thread ein, um Informationen vom Kunden in Echtzeit zu erhalten
// Die vom Client gesendeten Daten in Echtzeit @Override public void run () {try {while (true) {if ((Acceptline = in.readline ())! SocketEvent event = json.ParseObject (Acceptline, SocketEvent.Class); Switch (Event.GetType ()) {case utilfactory.chat_group: sendsgavoid (event.getKeyip (), Acceptline); brechen; case utilfactory.send_private: event.setType (utilfactory.chat_private); sendmsgtarget (Event.GetTemporaryIp (), json.tojonstring (Ereignis)); brechen; }}}} catch (Ausnahme e) {e.printstacktrace (); }}
3. Methoden zum Senden von Nachrichten an bestimmte IPs und Methoden zum Senden von Nachrichten an alle anderen IPs mit Ausnahme Ihres eigenen IPS.
// Senden Sie eine Nachricht an die angegebene IP -Adresse privat void sendMSgtarget (String targetIP, String msg) {int num = mlist.size (); für (int index = 0; index <num; index ++) {socket msocket = mlist.get (index); String ip = msocket.getInetaddress (). Gethostaddress (); if (ip.equals (targetIp)) {printwriter pout = null; try {pout = neuer Pressewriter (neuer Bufferterwriter (neuer Ausgangsstreamwriter (msocket.getOutputStream (), "utf-8"), true); pout.println (msg); // Beendigung der Methode Return; } catch (ioException e) {e.printstacktrace (); }}}}} // private void sendsgavoid (String vermeiden, String msstring) {int num = mlist.size (); für (int index = 0; index <num; index ++) {socket msocket = mlist.get (index); String ip = msocket.getInetaddress (). Gethostaddress (); if (! ip.equals (vermeiden)) {printwriter pout = null; try {pout = neuer Pressewriter (neuer Bufferterwriter (neuer Ausgangsstreamwriter (msocket.getOutputStream (), "utf-8"), true); pout.println (msstring); } catch (ioException e) {e.printstacktrace (); }}}}Der Client akzeptiert alle Informationen aus dem Server in MainActivity, umpackte nach dem Typ und verwendet EventBus, um die Informationen zur Anzeige an jedes Fragment zu senden.
@Subscribe (ThreadMode = ThreadMode.main) public void privatechat (SocketEvent Ereignis) {Switch (Event.GetType ()) {case MyApplication.chat_private: // die Nachricht an den privaten Chat -Raum ChatmessageBean Bean = New ChatMessageBean () posten; Bean.setmsg (Event.getMsg ()); Bean.setName (Event.getKeyIp ()); bean.settype (chatMessagebean.other_arg); EventBus.getDefault (). Post (Bean); brechen; case MyApplication.Send_private: sendsg (json.tojonstring (Ereignis)); brechen; }}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.