ใช้เทคโนโลยีซ็อกเก็ตเพื่อใช้ห้องแชทออนไลน์และฟังก์ชั่นแชทส่วนตัวเนื้อหาเฉพาะมีดังนี้
โดยไม่ต้องกังวลใจเพิ่มเติมขอภาพ:
1. หน้าแชทห้องแชทหน้าแชท
รายชื่อติดต่อสำหรับผู้ใช้ออนไลน์
หน้าการเชื่อมต่อซ็อกเก็ต
หน้าแชทส่วนตัว
การแนะนำโครงการ
ใช้การเชื่อมต่อซ็อกเก็ตกับเซิร์ฟเวอร์: เมื่อไคลเอนต์แต่ละตัวเชื่อมต่อกับเซิร์ฟเวอร์เซิร์ฟเวอร์จะบันทึกซ็อกเก็ตที่เชื่อมต่อแต่ละตัวในรายการรวบรวมรายการ
ฟังก์ชั่นการแชทกลุ่ม: เมื่อผู้ใช้ส่งข้อความแชทกลุ่มไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์ส่งต่อข้อมูลทั้งหมดไปยังไคลเอนต์ที่เชื่อมต่อทั้งหมดในรายการรายการ
ฟังก์ชั่นการแชทส่วนตัว: หลังจากผู้ใช้ส่งข้อมูลการแชทส่วนตัวไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์จะส่งข้อความไปยัง IP เป้าหมาย
แสดงรายชื่อผู้ติดต่อออนไลน์: เมื่อผู้ใช้ใหม่เข้าสู่ระบบที่ประสบความสำเร็จเซิร์ฟเวอร์จะส่งข้อมูลการติดต่อออนไลน์ไปยังไคลเอนต์ในรูปแบบของสตริง JSON และไคลเอนต์จะได้รับข้อมูลติดต่อออนไลน์โดยแยกวิเคราะห์สตริง JSON
ปรับแต่ง SockketEvent คลาสที่ทรงพลัง: ไคลเอนต์สื่อสารกับเซิร์ฟเวอร์และบันทึกข้อมูลผ่านคลาสนี้แล้วใช้เครื่องมือ FASTJSON เพื่อแปลงวัตถุคลาสเป็นสตริง JSON สำหรับการส่ง
SocketEvent คลาสสาธารณะ {ส่วนตัว int type = 0; สตริงส่วนตัว msg = ""; สตริงส่วนตัว keyip = ""; // คีย์ IP Private String TemporaryIp = ""; // IP IP Public SocketEvent () {} public int getType () {ประเภท return; } โมฆะสาธารณะ setType (ประเภท int) {this.type = type; } สตริงสาธารณะ getMSG () {return msg; } โมฆะสาธารณะ setMSG (สตริงผงชูรส) {this.msg = msg; } สตริงสาธารณะ getKeyIp () {return keyip; } โมฆะสาธารณะ setKeyIP (สตริง keyip) {this.keyip = keyip; } สตริงสาธารณะ getTemporaryIp () {return temporaryIp; } โมฆะสาธารณะ setTemporaryIp (String temporaryIp) {this.temporaryip = temporaryIp; -ประเภท: ลงชื่อเข้าใช้ประเภทของข้อมูลที่ส่งไปในปัจจุบัน ข้อมูลการแยกวิเคราะห์เซิร์ฟเวอร์และไคลเอนต์ใช้เพื่อกำหนดประเภทของข้อความที่เป็นของ
สาธารณะคงที่สุดท้าย int chat_private = 111; // คำแนะนำสำหรับการแชทส่วนตัวสาธารณะคงที่สุดท้าย int chat_group = 222; // คำแนะนำสำหรับการแชทเป็นกลุ่มสาธารณะคงที่ int socket_success = 333; // คำสั่งสำหรับการเชื่อมต่อซ็อกเก็ตที่ประสบความสำเร็จสาธารณะคงที่ int socket_fail = 444; // คำสั่งสำหรับการเชื่อมต่อซ็อกเก็ตที่ล้มเหลวสาธารณะคงที่ int connect_success = 666; // คำสั่งสำหรับการเชื่อมต่อซ็อกเก็ตที่ประสบความสำเร็จสาธารณะคงที่ int connect_fail = 777; // คำสั่งสำหรับการเชื่อมต่อซ็อกเก็ตล้มเหลวสาธารณะคงที่สาธารณะสุดท้าย login_arg = 888; // ซ็อกเก็ตได้รับคำสั่งสำหรับการลงชื่อเข้าใช้การเข้าสู่ระบบของผู้ใช้ใหม่สาธารณะคงที่ int cancel_arg = 999; // คำสั่งสำหรับการลงนามในการเข้าสู่ระบบของผู้ใช้สาธารณะคงที่สุดท้าย int new_client = 3332; // คำสั่งสำหรับการลงนามในการเข้าสู่ระบบของผู้ใช้ใหม่สาธารณะคงที่ int all_client = 3432; // คำสั่งสำหรับการลงนามในการเข้าสู่ระบบของผู้ใช้ออนไลน์ทั้งหมดสาธารณะคงที่ int send_private = 5666; // คำสั่งสำหรับการส่งข้อความแชทส่วนตัวสาธารณะคงที่สุดท้าย int send_iplist = 6666; // คำสั่งเพื่อส่งคอลเลกชัน IP ผู้ใช้ที่เข้าสู่ระบบ
keyip: ที่อยู่ IP ของผู้ริเริ่มข้อความไคลเอนต์
อุณหภูมิ: ที่อยู่ IP ชั่วคราว หากเป็นประเภทที่เป็นประเภทแชทส่วนตัว IP นี้แสดงถึงที่อยู่ IP ของผู้ติดต่อเป้าหมาย
เซิร์ฟเวอร์
1. รับการเชื่อมต่อไคลเอนต์
ซ็อกเก็ต socketclient = server.accept ();
2. เปิดเธรดเพื่อรับข้อมูลจากลูกค้าแบบเรียลไทม์
// รับข้อมูลที่ส่งโดยไคลเอนต์แบบเรียลไทม์ @Override โมฆะสาธารณะเรียกใช้ () {ลอง {ในขณะที่ (จริง) {ถ้า ((acceptline = in.readline ())! = null) {system.out.println ("<ข้อความที่ได้รับคือ> SockketEvent Event = JSON.ParseObject (Acceptline, SockketEvent.class); switch (event.getType ()) {case utilfactory.chat_group: sendmsgavoid (event.get.keyip (), Acceptline); หยุดพัก; case utilfactory.send_private: event.setType (utilfactory.chat_private); SendMSGTARGET (Event.getTemporaryip (), json.tojsonstring (เหตุการณ์)); หยุดพัก; }}}} catch (Exception E) {E.printStackTrace (); -
3. วิธีการส่งข้อความไปยัง IPS ที่ระบุและวิธีการส่งข้อความไปยัง IP อื่น ๆ ทั้งหมดยกเว้น IPS ของคุณเอง
// ส่งข้อความไปยังที่อยู่ IP ที่ระบุโมฆะส่วนตัว SENDMSGTARGET (สตริง targetIp, สตริงผงชูรส) {int num = mList.Size (); สำหรับ (int index = 0; index <num; index ++) {socket msocket = mlist.get (ดัชนี); string ip = msocket.getInetAddress (). gethostaddress (); if (ip.equals (targetIp)) {printwriter pout = null; ลอง {pout = ใหม่ printWriter (ใหม่ bufferedWriter (ใหม่ outputStreamWriter (msocket.getOutputStream (), "UTF-8")), จริง); pout.println (msg); // การออกวิธีการส่งคืน; } catch (ioexception e) {e.printstacktrace (); }}}}} // ส่งโมฆะส่วนตัว sendmsgavoid (idewish String, string msstring) {int num = mlist.size (); สำหรับ (int index = 0; index <num; index ++) {socket msocket = mlist.get (ดัชนี); string ip = msocket.getInetAddress (). gethostaddress (); if (! ip.equals (หลีกเลี่ยง)) {printwriter pout = null; ลอง {pout = ใหม่ printWriter (ใหม่ bufferedWriter (ใหม่ outputStreamWriter (msocket.getOutputStream (), "UTF-8")), จริง); pout.println (msstring); } catch (ioexception e) {e.printstacktrace (); -ไคลเอนต์ยอมรับข้อมูลทั้งหมดจากเซิร์ฟเวอร์ใน mainactivity, repackages ตามประเภทและใช้ EventBus เพื่อส่งข้อมูลไปยังแต่ละส่วนเพื่อแสดงผล
@subscribe (threadmode = threadmode.main) โมฆะสาธารณะ Privatechat (เหตุการณ์ SocketEvent) {switch (event.getType ()) {case myapplication.chat_private: // โพสต์ข้อความไปยังแชทแชท bean.setmsg (event.getmsg ()); Bean.setName (Event.get.getKeyip ()); Bean.setType (chatMessageBean.others_arg); EventBus.getDefault (). โพสต์ (ถั่ว); หยุดพัก; กรณี myapplication.send_private: sendmsg (json.tojsonstring (เหตุการณ์)); หยุดพัก; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น