قم بإنشاء خادم شبكة بلغة Java لتحقيق التواصل بين العميل والخادم ، وأدرك أن العميل لديه مؤشرات ترابط مستقلة ولا يتداخل مع بعضها البعض.
الخطوات الأساسية لتطبيق متعدد الخيوط لتحقيق التواصل بين الخادم والموثوقية المتعددة
Server-Side Server.java
حزمة test.concurrent.socket ؛ استيراد java.io.*؛ استيراد java.net.inetaddress ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ /*** تم إنشاؤه بواسطة Dong في 15-6-22. * اتصال التوصيل استنادًا إلى بروتوكول TCP ، قم بتطبيق تسجيل الدخول إلى المستخدم* Server Side*/Public Class Server {public static void main (string [] args) {try {// 1. قم بإنشاء مقبس من جانب الخادم ، أي Serversocket ، حدد المنفذ المربوطة ، واستمع إلى Serversocket STERVESCTOCKET = جديد (8888) ؛ مقبس المقبس = فارغ ؛ // تسجيل عدد العملاء العد int = 0 ؛ System.out.println ("*** الخادم على وشك البدء ، في انتظار رابط العميل ***") ؛ // loop استمع إلى انتظار رابط العميل بينما (صحيح) {// استدعاء طريقة قبول () لبدء الاستماع ، في انتظار مقبس ارتباط العميل = serversocket.accept () ؛ // إنشاء مؤشر ترابط جديد ServerThread ServerThread = New ServerThread (Socket) ؛ // بدء ترابط ServerThread.start () ؛ count ++ ؛ // ابحث عن عدد العملاء system.out.println ("عدد العملاء:" + العد) ؛ inetaddress address = socket.getInetAddress () ؛ System.out.println ("IP للعميل الحالي:" + address.gethostaddress ()) ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }}} فئة معالجة مؤشرات الترابط من جانب الخادم serverTher.java
حزمة test.concurrent.socket ؛ استيراد java.io.*؛ استيراد java.net.socket ؛ /*** تم إنشاؤه بواسطة Dong في 15-6-22. * فئة معالجة مؤشرات الترابط من جانب الخادم*/الفئة العامة ServerThread يمتد Thread {// Socket Socket = NULL ؛ Public ServerThread (Socket Socket) {this.socket = socket ؛ }. inputStreamReader isr = null ؛ BufferedReader BR = NULL ؛ OutputStream OS = NULL ؛ printWriter pw = null ؛ حاول {// الحصول على دفق إدخال وقراءة معلومات العميل IS = Socket.getInputStream () ؛ ISR = new inputStreamReader (IS) ؛ // تحويل تدفقات البايت إلى تدفقات الأحرف br = جديد bufferreader (ISR) ؛ // إضافة معلومات سلسلة مخزنة = فارغة ؛ // حلقة قراءة البيانات بينما ((info = br.readline ())! = null) {system.out.println ("أنا الخادم ، وقال العميل:" +معلومات) ؛ } socket.shutdownInput () ؛ // أغلق دفق الإدخال // احصل على دفق الإخراج استجابةً لطلب العميل OS = socket.getOutputStream () ؛ PW = New PrintWriter (OS) ؛ // تم تعبئتها كطباعة دفق pw.write ("مرحبًا") ؛ pw.flush () ؛ // الإخراج المخزن مؤقت} catch (ioException e) {e.printStackTrace () ؛ } أخيرًا {try {// أغلق المورد if (pw! = null) pw.close () ؛ if (os! = null) os.close () ؛ if (is! = null) is.close () ؛ if (br! = null) br.close () ؛ if (socket! = null) socket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}} client.java
حزمة test.concurrent.socket ؛ استيراد java.io.*؛ استيراد java.net.socket ؛ /*** تم إنشاؤه بواسطة Dong في 15-6-22. * Client*/Public Class Client {public static void main (string [] args) {try {// 1. قم بإنشاء مقبس العميل ، وحدد رقم منفذ الخادم ومقبس المقبس = مقبس جديد ("LocalHost" ، 8888) ؛ // 2. احصل على دفق الإخراج وأرسل المعلومات إلى OutputStream OS = Socket.getOutputStream () ؛ // Byte Output Dream PrintWriter PW = New PrintWriter (OS) ؛ // لف دفق الإخراج كطباعة طباعة pw.write ("اسم المستخدم: توم ؛ كلمة المرور: 456") ؛ pw.flush () ؛ socket.shutdownoutput () ؛ // أغلق إدخال دفق الإخراج هو = socket.getInputStream () ؛ inputStreamReader ISR = جديد inputStreamReader (IS) ؛ BufferedReader BR = جديد BufferedReader (ISR) ؛ معلومات السلسلة = فارغة ؛ // اقرأ بينما ((info = br.readline ())! = null) {system.out.println ("أنا العميل: الخادم يقول:" + info) ؛ } br.close () ؛ is.close () ؛ isr.close () ؛ pw.close () ؛ OS.Close () ؛ socket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.