บทความนี้อธิบายถึงการใช้งานห้องแชทซ็อกเก็ตตามโปรโตคอล TCP ในการเขียนโปรแกรม Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ที่นี่ซ็อกเก็ตซ็อกเก็ตใช้สำหรับการเขียนโปรแกรมซึ่งสำเร็จการสื่อสารคู่ระหว่างเซิร์ฟเวอร์และไคลเอนต์ตามบริการที่เชื่อถือได้ของ TCP
ด้านเซิร์ฟเวอร์เซิร์ฟเวอร์:
แพ็คเกจ com.han; นำเข้า java.awt.container; นำเข้า java.awt.event.actionEvent; นำเข้า java.awt.event.ActionListener; นำเข้า java.awt.event.windowadapter; นำเข้า Java.awt.event.windowevent นำเข้า Java.io javax.swing.jdialog; นำเข้า Javax.swing.jscrollpane; นำเข้า Javax.swing.jtextarea; นำเข้า Javax.swing.jtextfield;/*** โปรแกรมนี้ใช้ส่วนการเขียนโปรแกรมเซิร์ฟเวอร์ของโปรแกรม TCP * การเขียนโปรแกรมโดยใช้ซ็อกเก็ตซ็อกเก็ตทำเพื่อให้ได้การสื่อสารแบบคู่กับไคลเอนต์ตามบริการที่เชื่อถือได้ของ TCP * ดูไคลเอนต์คลาสไคลเอนต์ในแพ็คเกจนี้สำหรับการเขียนโปรแกรม * @author han * */ @suppresswarnings ("serial") เซิร์ฟเวอร์ระดับสาธารณะขยาย jdialog {private bufferedreader reader; นักเขียน Private Printwriter; เซิร์ฟเวอร์เซิร์ฟเวอร์เซิร์ฟเวอร์ส่วนตัว ซ็อกเก็ตซ็อกเก็ตส่วนตัว ส่วนตัว jtextarea ta = new jtextarea (); ส่วนตัว JSCrollPane SP = JSCrollPane ใหม่ (TA); ส่วนตัว jtextfield tf = new jtextfield (); คอนเทนเนอร์ CC; เซิร์ฟเวอร์สาธารณะ (ชื่อสตริง) {settitle (ชื่อ); AddWindowListener (WindowAdapter ใหม่ () {โมฆะสาธารณะ Windowclosing (WindowEvent We) {dispose (); // เพิกถอนทรัพยากรที่เกี่ยวข้องทั้งหมดที่เกี่ยวข้องกับ System.Exit (0); // ออกจากโปรแกรมโดยปกติ}}); cc = getContentPane (); setlayout (null); ta.setlineWrap (จริง); ta.seteditable (เท็จ); sp.setbounds (0,0,300,342); tf.setbounds (0,342,300,25); CC.Add (SP); CC.Add (TF); tf.addactionListener (ใหม่ actionListener () {โมฆะสาธารณะ actionperformed (actionEvent e) {ลอง {writer = ใหม่ printwriter (socket.get.getUtputStream (), true);} catch (ioexception e1) {// toDe ta.append ("user1:"+tf.getText ()+'/n'); } void getServer () {ลอง {server = ใหม่ serversocket (8998); ta.append ("ซ็อกเก็ตเซิร์ฟเวอร์ถูกสร้างขึ้นสำเร็จ/n"); ในขณะที่ (จริง) {ta.append ("รอการเชื่อมต่อไคลเอนต์/n"); ซ็อกเก็ต = server.accept (); ta.append ("ไคลเอนต์เชื่อมต่อ/n"); reader = ใหม่ bufferedReader (ใหม่ inputStreamReader (socket.getInputStream ())); getClientMessage (); }} catch (exception e) {e.printstacktrace (); }} โมฆะส่วนตัว getClientMessage () {ลอง {ในขณะที่ (จริง) {สตริงข่าว = reader.readline (); ถ้า (ข่าว! = null) {ta.append ("user2:"+news+"/n"); } else {ta.append ("user2 (ไคลเอนต์) ตัดการเชื่อมต่อ/n"); หยุดพัก; }}} catch (ioexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } ลอง {ถ้า (reader! = null) {reader.close (); }} catch (ioexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } if (ซ็อกเก็ต! = null) {ลอง {socket.close (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เซิร์ฟเวอร์ user1 = เซิร์ฟเวอร์ใหม่ ("user1"); user1.SetBounds (0,0,300,400); user1.setResizable (เท็จ); user1.setVisible (จริง); user1.getServer (); -ไคลเอนต์ไคลเอนต์:
แพ็คเกจ com.han; นำเข้า java.awt.*; นำเข้า java.awt.event.*; นำเข้า java.io.*; นำเข้า java.net.*; นำเข้า Javax.swing.*;/***โปรแกรมนี้ใช้ส่วนการเขียนโปรแกรมไคลเอนต์ส่วนหนึ่งของโปรแกรม TCP * การเขียนโปรแกรมโดยใช้ซ็อกเก็ตซ็อกเก็ตทำเพื่อให้ได้การสื่อสารแบบคู่กับเซิร์ฟเวอร์ตามบริการที่เชื่อถือได้ของ TCP * ดูคลาสเซิร์ฟเวอร์ในแพ็คเกจนี้สำหรับการเขียนโปรแกรมเซิร์ฟเวอร์ * สามารถเรียกใช้บนแพลตฟอร์มที่แตกต่างกันและเครื่องจักรที่แตกต่างกัน แต่ที่อยู่ IP ที่เขียนในรหัสจะต้องแก้ไขไปยังที่อยู่ IP ของเครื่องที่ใช้เซิร์ฟเวอร์เซิร์ฟเวอร์เซิร์ฟเวอร์ * @author han * */ @suppresswarnings ("serial") ไคลเอนต์คลาสสาธารณะขยาย jdialog {ตัวอ่านส่วนตัว bufferedreader; นักเขียน Private Printwriter; ซ็อกเก็ตซ็อกเก็ตส่วนตัว ส่วนตัว jtextarea ta = new jtextarea (); ส่วนตัว JSCrollPane SP = JSCrollPane ใหม่ (TA); ส่วนตัว jtextfield tf = new jtextfield (); คอนเทนเนอร์ CC; ไคลเอนต์สาธารณะ (ชื่อสตริง) {settitle (ชื่อ); AddWindowListener (WindowAdapter ใหม่ () {โมฆะสาธารณะ Windowclosing (WindowEvent We) {dispose (); // เพิกถอนทรัพยากรที่เกี่ยวข้องทั้งหมดที่เกี่ยวข้องกับ System.Exit (0); // ออกจากโปรแกรมโดยปกติ}}); cc = getContentPane (); setlayout (null); ta.setlineWrap (จริง); ta.seteditable (เท็จ); sp.setbounds (0,0,300,342); tf.setbounds (0,342,300,25); CC.Add (SP); CC.Add (TF); tf.addactionListener (ใหม่ actionListener () {โมฆะสาธารณะ actionperformed (actionEvent e) {writer.println (tf.getText ()); ta.append ("user2:" tf.getText ()+'/n'); tf.settext (""); } โมฆะส่วนตัวเชื่อมต่อ () {ta.append ("พยายามเชื่อมต่อ/n"); ลอง {ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("192.168.1.3", 8998); } catch (unknownhostexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } ลอง {writer = new printWriter (socket.getOutputStream (), true); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } ta.append ("กรอกการเชื่อมต่อ/n"); } โมฆะส่วนตัว getClientMessage () {ลอง {reader = ใหม่ bufferedReader (ใหม่ inputStreamReader (socket.getInputStream ())); ในขณะที่ (จริง) {string news = reader.readline (); ถ้า (ข่าว! = null) {ta.append ("user1:"+news+"/n"); } else {ta.append ("user1 (เซิร์ฟเวอร์) ถูกตัดการเชื่อมต่อและเมื่อเซิร์ฟเวอร์ถูกเชื่อมต่อใหม่ให้รีสตาร์ท user2 (ไคลเอนต์) สำหรับการสื่อสาร/n"); หยุดพัก; }}} catch (ioexception e) {// toDo บล็อก catch ที่สร้างขึ้นอัตโนมัติ ta.append ("user1 (เซิร์ฟเวอร์) สำหรับการสื่อสาร/n"); E.PrintStackTrace (); } ลอง {ถ้า (reader! = null) {reader.close (); }} catch (ioexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } if (ซ็อกเก็ต! = null) {ลอง {socket.close (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ไคลเอนต์ user2 = ไคลเอนต์ใหม่ ("user2"); user2.setBounds (0,0,300,400); user2.setVisible (จริง); user2.setResizable (เท็จ); user2.connect (); user2.getClientMessage (); -สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเนื้อหาที่เกี่ยวข้องกับ Java โปรดตรวจสอบหัวข้อของเว็บไซต์นี้: "สรุปทักษะการเขียนโปรแกรม Java Socket", "บทสรุปของไฟล์ Java และทักษะการดำเนินงานไดเรกทอรี", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม", "สรุปทักษะการดำเนินงาน Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน