Saya baru saja menganggur dan telah meluangkan waktu untuk meninjau beberapa aplikasi teknis Java.
Saya tidak ada hubungannya hari ini. Berdasarkan protokol UDP, saya menulis program ruang obrolan yang sangat sederhana.
Dalam pekerjaan saya saat ini, soket jarang digunakan, yang juga merupakan memori sederhana pemrograman jaringan java.
Mari kita lihat efeknya:
Efek implementasi dapat dikatakan sangat, sangat sederhana, tetapi Anda masih dapat melihat prinsip implementasi.
Pengguna "Ruang Obrolan 001", Xiaohong dan Xiaolu mengobrol satu sama lain untuk beberapa kata, dan Xiaohei dari "Ruang Obrolan 002" mengabaikannya dan kesepian.
Lihatlah implementasi kode:
1. Pertama -tama, implementasi server pesan, fungsinya sangat sederhana:
• Daftarkan informasi klien (ruang obrolan mana yang Anda masukkan, dll.);
• membangun objek soket protokol UDP untuk menerima pesan yang dikirim oleh setiap klien;
• Menganalisis konten pesan dan dorong informasi obrolan kembali ke setiap klien di ruang obrolan yang sesuai;
Paket com.tsr.simplechat.receive_server; impor java.io.ioException; import java.net.datagrampacket; import java.net.datagramsocket; impor java.net.socketexception; impor java.util.raylist; impor java. com.google.gson.gson; impor com.tsr.simplechat.bean.messageentity; import com.tsr.simplechat.client.chatclient; // server obrolan kelas publik chatserver memperluas utas {// program menempati nomor port port private static final port = 10000; // Pesan menerima Socket Object Private Static DatagramSocket Server = NULL; // Objek Kamus (Kunci: ID Ruang Obrolan, Nilai: Set Pengguna Klien Di Bawah Ruang Obrolan ini); private static hashMap <string, arraylist <ChatClient>> grup = new HashMap <String, ArrayList <ChatClient>> (); // konstruktor chatserver publik () {coba {// pesan menerima inisialisasi konstruk dari server objek soket = datagramsocket baru (port); } catch (SocketException e) {E.PrintStackTrace (); }} // Daftarkan pengguna login baru di ruang obrolan public static void logingroup (string groupId, chatclient client) {// Dapatkan semua pengguna online dari ruang obrolan melalui ruang obrolan arraylist <ChatClient> klien = groups.get (groupId); if (klien == null) {client = new ArrayList <ChatClient> (); } // Daftarkan pengguna yang masuk ke ruang obrolan kali ini klien.add (klien); // Perbarui Informasi Ruang Obrolan Groups.put (GroupID, Klien); } // Terima pesan @Override public void run () {while (true) {receiveMessage (); }} private void receiveMessage () {// udp packet byte [] buf = byte baru [1024]; Packet datagrampacket = datagrampacket baru (buf, buf.length); while (true) {coba {// terima packet server.receive (packet); } catch (ioException e) {// TODO AUTO-ENCEALATED Catch Block E.PrintStackTrace (); } // Parse paket data dan dapatkan informasi obrolan string konten = string baru (packet.getData (), 0, packet.getLength ()); // Parse JSON Data melalui paket pihak ketiga GSON GSON = GSON baru (); MessageEntity Me = gson.fromjson (konten, messageEntity.class); // Parsen konten pesan dan dapatkan semua pengguna online dari ruang obrolan melalui Ruang Obrolan ID ArrayList <ChatClient> klien = groups.get (Me.getGroupId ()); // dorong pesan yang diterima kembali ke setiap pengguna ruang obrolan untuk (klien chatclient: klien) {client.pushbackMessage (saya); }}}}2. Program klien masih sangat sederhana:
• Definisikan secara sederhana antarmuka ruang obrolan klien.
• Bangun pesan Kirim Objek Soket.
• Dapatkan konten kotak informasi obrolan dan kirim ke server.
Paket com.tsr.simplechat.client; import java.awt.button; import java.awt.event; import java.awt.frame; import java.awt.textarea; impor java.awt.textfield; impor java.awt.event.windowapter; impor; java.io.ioException; impor java.net.datagrampacket; impor java.net.datagramsocket; impor java.net.inetaddress; impor java.net.socketexception; import java.net.unknownhostException; impor cocketeCr. com.tsr.simplechat.receive_server.catserver; // program klien kelas publik chatclient memperluas bingkai {private static final long serialversionuid = 1l; // ID Ruang Obrolan Private String GroupID; // Nama Pengguna Klien Private String ClientName; // pesan klien mengirimkan soket soket pribadi datagramsocket msg_send; // port layanan port int private final = 10000; // Alamat IP Server IP inetaddress pribadi; // Kontrol Klien Textfield TF = TextField baru (20); TextArea ta = TextArea baru (); Tombol kirim = tombol baru ("Kirim"); // Konstruktor klien chatclient publik (string groupId, string clientName) {super ("ruang obrolan:" + groupId + "/" + clientName); this.clientName = clientName; this.groupid = groupId; // Atur gaya antarmuka klien Add ("North", TF); tambahkan ("tengah", ta); tambahkan ("selatan", kirim); setsize (250, 250); menunjukkan(); // inisialisasi init () untuk server terkait obrolan; // monitor addWindowlistener (windowadapter baru () {public void windowclosing (windowevent e) {// tutup pesan pengiriman pesan msg_send.close (); // tutup program klien buang (); system.exit (0);}}); } // Inisialisasi private void init () {// Daftarkan informasi pengguna dan ruang obrolan saat ini ke server chatserver.logingroup (groupId, this); coba {// inisialisasi pesan pengiriman soket msg_send = datagramsocket baru (); // tentukan server pesan coba {ip = inetaddress.getByName ("127.0.0.1"); } catch (unknownHostException e) {System.out.println ("UnknownHostException .."); }} catch (SocketException e) {System.out.println ("Pengecualian Koneksi Socket .."); }} // Pesan pengiriman waktu mendengarkan tindakan boolean publik (event evt, objek arg) {if (evt.target.equals (kirim)) {coba {// dapatkan konten konten input konten = tf.getText (); // Kirim pesan send_message (konten); // Bersihkan kotak obrolan tf.settext (null); } catch (Exception IOE) {System.out.print (ioe.getMessage ()); }} return true; } // Kirim pesan pribadi void send_message (konten string) {// format pesan (format json) string message = messageFormat (konten); // Encapsulate Pesan ke dalam Byte Paket UDP [] buf = message.getBytes (); Packet datagrampacket = datagrampacket baru (buf, buf.length, ip, port); coba {// kirim pesan msg_send.send (packet); } catch (ioException e) {System.out.println ("IO Exception .."); }} // Pesan Formating Private String MessageFormat (Konten String) {StringBuffer Buffer = New StringBuffer (); buffer.append ("{/" groupId/":"). append ("/" "). append (groupId) .Append ("/","); buffer.append ("/" username/":/"). append (clientName) .append ("/", "); buffer.append ("/"text/":/"). Tambahkan (konten) .append ("/"}"); return buffer.toString (); } // Dapatkan berita terbaru dari ruang obrolan saat ini dari server (callback ..) public void PushbackMessage (MessageEntity Me) {ta.append (me.getusername () + ":" + me.getText ()); ta.append ("/n"); }} 3. Kelas Entitas Pesan <br /> Ini terutama digunakan untuk merangkum pesan ke dalam objek, termasuk: ID ruang obrolan, nama panggilan pengirim pesan, dan konten pesan. Gunakan format JSON untuk diurai.
Paket com.tsr.simplechat.bean; // Entitas Pesan Public Class MessageEntity {Private String GroupID; nama pengguna string pribadi; teks string pribadi; 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. Oke, ini pada dasarnya dilakukan di sini, dan buat kelas tes.
• Nyalakan server pesan.
• Buka tiga klien, dua di antaranya memasuki "Ruang Obrolan 001" dan yang lain memasukkan "Ruang Obrolan 002".
impor com.tsr.simplechat.client.chatclient; import com.tsr.simplechat.receive_server.catserver; tes kelas publik {public static void main (string [] args) {chatserver r = new ChatServer (); r.start (); Chatclient c1 = new chatclient ("001", "Little Red"); Chatclient c2 = chatclient baru ("001", "Little Green"); Chatclient c3 = chatclient baru ("002", "Little Black"); }}Di atas adalah semua konten artikel ini. Saya harap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.