تشارك هذه المقالة وظيفة دردشة مجموعة Java للرجوع إليها. المحتوى المحدد كما يلي
دعم Java لبروتوكول TCP:
-> تحدد حزمة Java.net خدمين ومقبس فئتين ، والتي تستخدم لتنفيذ اتصالات ثنائية الاتجاه ، على التوالي.
-> فئة العميل تحدد العميل
package com.dragon.java.tcpchat ؛ استيراد java.io.ioException ؛ استيراد java.net.socket ؛ استيراد java.net.unknownhostexception ؛/** * client * * @auster auser * */public client {public static void main (string args []) مقبس ("192.168.1.188" ، 10000) ؛ // الخيط الذي يرسل المعلومات من خلال Piece New ClientEnd (Client) .start () ؛ // إنشاء مؤشر ترابط يتلقى معلومات جديدة ClientReceive (Client) .start () ؛ // لأنك ترغب في تنفيذ وظيفة الدردشة بدلاً من إرسال المعلومات مرة واحدة فقط ، لا يمكن إغلاق دفق الإخراج ولا العميل. // client.shutdownoutput () ؛ // client.close () ؛ }}-> يحدد فئة ClientsEnd سلسلة الرسائل التي يرسل العميل المعلومات إلى الخادم
Package com.dragon.java.tcpchat ؛ استيراد java.io.ioException ؛ استيراد java.io.printstream ؛ استيراد java.net.socket ؛ استيراد java.util.scanner ؛/** * مؤشر الترابط حيث يرسل العميل المعلومات إلى الخادم * * author auser * */public class placensend {private scanner. مقبس المقبس الخاص ؛ Publicsend (Socket Socket) {this.socket = socket ؛ } Override public void run () {scanner = new Scanner (system.in) ؛ حاول {printstream ps = new printstream (socket.getOutputStream ()) ؛ خط السلسلة = "" ؛ // حظر المعلومات الإرسال أثناء ((line = scanner.nextLine ())! = null) {ps.println (line) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }}}-> تحدد فئة ClientReceive مؤشر الترابط الذي يتلقى العميل معلومات الخادم عليه
package com.dragon.java.tcpchat ؛ import java.io.bufferedreader ؛ import java.io.inputstreamreader ؛ import java.net.socket ؛/** * مؤشر ترابط على معلومات استلام العميل * * author auser * */clientreceive clientrenceive public socket ؛ ClientReceive العامة (Socket Socket) {this.socket = socket ؛ } Override public void run () {try {bufferedReader br = new BufferedReader (new inputStreamReader (socket.getInputStream ())) ؛ // تلقي المعلومات من خلال خط سلسلة السطر = "" ؛ بينما ((line = br.readline ())! = null) {system.out.println (line) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }}}-> خادم تعريف فئة الخادم
package com.dragon.java.tcpchat ؛ import java.io.ioException ؛ استيراد java.net.serversoCKE ؛ InterruptedException {list <Socket> list = new ArrayList <> () ؛ // قم بإنشاء خادم ServerSocket من جانب الخادم = ServersOcket (10000) ؛ بينما (صواب) {// حظر طريقة استلام مقبس العميل = server.accept () ؛ // تصميم مؤشرات ترابط متعددة قد تضيف أو حذف المجموعة ، متزامنة (قائمة) {list.add (socket) ؛ } // ابدأ مؤشر ترابط جديد للتعامل مع اتصال هذا العميل المقابض الجديدة (المقبس ، القائمة) .start () ؛ } // لأنك لا تعرف متى يرسل العميل المعلومات ، يجب تشغيل الخادم ولا يمكن إيقافه. }}:
package com.dragon.java.tcpchat ؛ import java.io.bufferedreader ؛ import java.io.ioException ؛ import java.io.inputstreamreader ؛ مقبس المقبس ؛ قائمة خاصة <Socket> ؛ / *** Constructor** Param Socket* Client Client Client حاليًا* param قائمة من العملاء المتصلين المخزنين*/ public bandlesocket (مأخذ التوصيل ، قائمة <Socket>) {this.socket = socket ؛ this.list = list ؛ } / *** طريقة تشغيل الموضوع* / Override public void run () {inetaddress address = socket.getInetAddress () ؛ // احصل على عنوان العميل المتصل بسلسلة الخادم IP = address.gethostaddress () ؛ System.out.println (IP + "دعنا نذهب إلى الإنترنت!") ؛ if (ip.equals ("192.168.1.117")) {Synchronized (list) {sendToAll (IP + "blacklist in buft to bearation!") ؛ list.remove (Socket) ؛ } يعود؛ } جرب {bufferedReader br = new BufferedReader (new inputStreamReader (socket.getInputStream () ، "gbk")) ؛ خط السلسلة = "" ؛ بينما ((line = br.readline ())! = null) {String msg = ip + ":" + line ؛ system.out.println (msg) ؛ // الإخراج إلى وحدة تحكم الخادم // أرسل ما يقوله هذا العميل لجميع العملاء الآخرين SendToall (MSG) ؛ }} catch (ioException e) {// e.printstacktrace () ؛ System.out.println (IP + "Offlined!") ؛ Synchronized (list) {list.remove (socket) ؛ }}} / ** * أرسل معلومات إلى جميع العملاء وإزالة المقبس الحالي * * param msg * المعلومات المرسلة بواسطة * / private void sendtoall (String msg) {synchronized (list) {for (socket s: list) {if (s! = socket) {try {printstream ps = new printstream (s.getoutream () ؛ ps.println () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}}}}}}}} -> ملاحظة: لأنه لتمكين العميل من الاتصال بالخادم ، أي أن العميل يجب أن يجد أولاً الخادم ، لذلك يجب تمكين الخادم أولاً ثم الخادم ...
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.