Gunakan teknologi soket untuk mengimplementasikan ruang obrolan online dan fungsi obrolan pribadi, konten spesifiknya adalah sebagai berikut
Tanpa basa -basi lagi, mari kita dapatkan fotonya:
1. Halaman obrolan grup ruang obrolan
Daftar Kontak untuk Pengguna Online
halaman koneksi soket
Halaman obrolan pribadi
Pendahuluan Proyek
Menerapkan koneksi soket dengan server: Ketika setiap klien terhubung ke server, server akan menyimpan setiap soket yang terhubung dalam koleksi daftar.
Fungsi obrolan grup: Ketika pengguna mengirim pesan obrolan grup ke server, server meneruskan semua informasi ke semua klien yang terhubung dalam daftar daftar.
Fungsi Obrolan Pribadi: Setelah pengguna mengirim informasi obrolan pribadi ke server, server akan mengirim pesan ke IP target.
Tampilkan Daftar Kontak Online: Ketika pengguna baru berhasil di berhasil, server akan mengirim informasi kontak online ke klien dalam bentuk string JSON, dan klien memperoleh informasi kontak online dengan parsing string JSON.
Kustomisasi SocketEvent kelas yang kuat: Klien berkomunikasi dengan server dan menyimpan data melalui kelas ini, dan kemudian menggunakan alat FastJson untuk mengubah objek kelas menjadi string JSON untuk transmisi.
SocketEvent kelas publik {private int type = 0; Private String msg = ""; private string keyip = ""; // Kunci IP Private String sementaraP = ""; // SocketEvent publik IP sementara () {} public int getType () {return type; } public void setType (int tipe) {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 getTemporerIp () {return sementaraP; } public void settemporaryIP (String sementara) {this.temporerip = sementaraP; }}Jenis: Tandatangani jenis informasi apa yang saat ini dikirim. Data penguraian server dan klien digunakan untuk menentukan jenis pesan yang termasuk.
public static int int chat_private = 111; // instruksi untuk obrolan pribadi public public static int chat_group = 222; // instruksi untuk obrolan grup public static int int socket_success = 333; // instruksi untuk koneksi soket yang berhasil public static final int socket_fail = 444; // instruksi untuk koneksi soket gagal public static final int connect_success = 666; // instruksi untuk koneksi soket yang berhasil public static final int connect_fail = 777; // Perintah untuk koneksi soket gagal statis public static int login_arg = 888; // Soket menerima perintah untuk menandatangani login pengguna baru Public Static Int Cancel_ARG = 999; // Perintah untuk menandatangani login pengguna final statis public final new_client = 3332; // Perintah untuk menandatangani login pengguna baru Public Static Int All_client = 3432; // Perintah untuk menandatangani login semua pengguna online statis int send_private = 5666; // Perintah untuk mengirim pesan obrolan pribadi public static final int send_iplist = 6666; // Instruksi untuk mengirim koleksi IP pengguna yang masuk
KEYIP: Alamat IP Inisiator Pesan Klien
Suhu: Alamat IP sementara. Jika itu adalah jenis yang merupakan jenis obrolan pribadi, maka IP ini mewakili alamat IP dari kontak target.
Server
1. Terima Koneksi Klien
Socket socketclient = server.accept ();
2. Nyalakan utas untuk menerima informasi dari klien secara real time
// Dapatkan data yang dikirim oleh klien secara real time @Override public void run () {coba {while (true) {if ((acceptLine = in.readline ())! = Null) {System.out.println ("<pesan yang diterima adalah>" + Acceptline); SocketEvent Event = json.parseObject (Acceptline, SocketEvent.class); switch (event.getType ()) {case utilfactory.chat_group: sendMsgavoid (event.getKeyip (), acceptLine); merusak; case utilfactory.send_private: event.setType (utilfactory.chat_private); sendMSgTarget (event.gettemorerip (), json.toJsonstring (event)); merusak; }}}} catch (Exception e) {E.PrintStackTrace (); }}
3. Metode untuk mengirim pesan ke IP dan metode tertentu untuk mengirim pesan ke semua IP lain kecuali untuk IP Anda sendiri.
// Kirim pesan ke alamat IP yang ditentukan private void sendMSgTarget (string targetIP, string msg) {int num = mList.size (); untuk (int index = 0; index <num; index ++) {socket msocket = mList.get (index); String ip = msocket.getInetAddress (). GetHostAddress (); if (ip.equals (targetip)) {printwriter pout = null; coba {pout = printwriter baru (BufferedWriter baru (outputStreamWriter baru (msocket.getoutputStream (), "UTF-8")), true); pout.println (msg); // Metode Keluar Kembali; } catch (ioException e) {e.printstacktrace (); }}}}} // Kirim private void sendMsGavoid (string hindari, string msstring) {int num = mList.size (); untuk (int index = 0; index <num; index ++) {socket msocket = mList.get (index); String ip = msocket.getInetAddress (). GetHostAddress (); if (! ip.equals (hindari)) {printwriter pout = null; coba {pout = printwriter baru (BufferedWriter baru (outputStreamWriter baru (msocket.getoutputStream (), "UTF-8")), true); pout.println (msstring); } catch (ioException e) {e.printstacktrace (); }}}}Klien menerima semua informasi dari server dalam MainActivity, pengemasan ulang sesuai dengan jenisnya, dan menggunakan Eventbus untuk mengirim informasi ke setiap fragmen untuk ditampilkan.
@Subscribe (threadMode = threadMode.main) public void privatechat (SocketEvent Event) {switch (event.getType ()) {case myApplication.chat_private: // Posting pesan ke ruang obrolan pribadi chatmessageBean bean = new chatmessageBean (); bean.setmsg (event.getmsg ()); bean.setname (event.getKeyip ()); bean.settype (chatmessageBean.others_arg); Eventbus.getDefault (). POST (bean); merusak; case myApplication.send_private: sendmsg (json.tojsonstring (acara)); merusak; }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.