تشترك هذه المقالة في رمز محدد لخادم تحميل ملف Java والعميل للرجوع إليه. المحتوى المحدد كما يلي
خادم تحميل الملف:
/ *** من جانب الخادم باستخدام بروتوكول TCP لتنفيذ وظيفة التحميل* الأفكار:* إنشاء خادمات جديدة* انتظر حتى يتصل العميل* بعد الاتصال ، وابدأ مؤشر ترابط الطفل ، ومرر المقبس الذي تم الحصول عليه من خلال سلسلة خيط الطفل* looping* @uuthor yajun*/ public classploadserver {public static void main (] command uploadThread = جديد exploadThread () ؛ server.start (command) ؛ } /*** الوظيفة: قبول الاتصال ، ابدأ مؤشر ترابط الطفل ، أمر loop* param كائن مؤشر ترابط الطفل المستخدم للتنزيل ، والذي ينفذ واجهة Runnable* /private void start (UploadThread command) {// local foriable serversocketitice = null ؛ مقبس transsocket. // منطق الأعمال Try {ServersOcket = New ServersOcket (55555) ؛ بينما (صحيح) {system.out.println ("انتظر الاتصال ...") ؛ transSocket = serversocket.accept () ؛ int i = 0 ؛ i ++ ؛ System.out.println ("th"+i+"connection") ؛ // هل تحتاج إلى إغلاق الموضوع بعد التنزيل؟ ؟ ؟ command.setsocket (transSocket) ؛ Executors.NewFixedThreadPool (5) .execute (command) ؛ } // استثناء catch} catch (ioException e) {E.PrintStackTrace () ؛ // Close Resource} أخيرًا {try {serversocket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} // نهاية Try} // نهاية Connect stest public void testConnect () {// Test Task: أولاً قم بتشغيل جانب الخادم ، ثم قم بتشغيل العميل عدة مرات. يمكن لقطاع الخادم إنشاء مؤشرات ترابط الأطفال بشكل مستمر ، واختبار الاختبار ناجحًا // اختبار الاختبار: قم بإنشاء مؤشر ترابط لمحاكاة أمر تحميل مؤشر ترابط التحميل = جديد exploadthread () ؛ ابدأ (أمر) ؛ } test public void testDown () يلقي ioException {byte [] buf ؛ BytearRayInputStream BIS ؛ String str = "canglaoshi.avi/ncontent ، المحتوى ، المحتوى" ؛ buf = str.getBytes () ؛ BIS = جديد bytearrayinputStream (BUF) ؛ UploadTread UT = جديد exploadThread () ؛ UT.Down (BIS) ؛ }} // subthread التي تكمل كل عملية تحميل فئة Transmission ، تنفذ Runnable {Socket Socket ؛ exploadThread () {} exploadthread (Socket Socket) {this.socket = socket ؛ } Override public void run () {inputStream in ؛ حاول {in = socket.getInputStream () ؛ أسفل (في) ؛ // استثناء معالجة} catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {try {socket.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} // اختبار رمز/*حاول {thread.sleep (5000) ؛ System.out.println (thread.currentThread (). getName ()+"، copyname ()+") ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ }*/} // end of Run public void setSocket (Socket Socket) {this.socket = socket ؛ } // تنزيل طريقة/*** الهدف: اكتب البيانات في inputStream إلى الفكرة المحلية*:* 1. Down (inputStream in) يلقي ioException {// المحلي المتغير ch ch ؛ char [] namearr = new Char [256] ؛ Byte [] buf = new byte [1024] ؛ اسم السلسلة = "" ؛ OutputStream Out = null ؛ // Business Logic Try {// الخطوة 1: احصل على اسم الملف وقم بإنشاء دفق إخراج الملف int i = 0 ؛ بينما ((ch = (char) in.read ())! = '/n') {namearr [i ++] = ch ؛ } //name=namearr.toString() ؛// هذه الجملة لا يمكن تحويل مجموعة حرف إلى سلسلة. تحتاج إلى استخدام اسم العبارة التالية = سلسلة جديدة (namearr) ؛ System.out.println ("الملف المراد تنزيله هو:"+name) ؛ out = new FileOutputStream ("src // down //"+name) ؛ // الخطوة 2: اكتب محتويات أخرى في دفق الإدخال إلى الملف int len ؛ بينما ((len = in.read (buf))! =-1) {out.write (buf ، 0 ، len) ؛ } out.flush () ؛ // استثناء capture} catch (ioException e) {E.PrintStackTrace () ؛ // Close Resource} أخيرًا {// السؤال: هل يمكن وضع اثنين من التقاطات معا؟ كيف تتعامل مع الاستثناءات عند إغلاق الدفق؟ in.close () ؛ out.close () ؛ } // debug system.out.println (name) ؛ }} // نهاية التحميل عميل تحميل الملف:
/ *** العميل الذي يستخدم بروتوكول TCP لتنفيذ وظيفة التحميل* Author yajun*/ الفئة العامة exploadClient {public static void main (string [] args) {uploadclient client = new UploadClient () ؛ client.upload ("src // الخميس // aslisttest.java") ؛ } / *** الوظيفة: تحميل ملف إلى الخادم* 1. قم بإنشاء اتصال بالخادم* 2. احصل على دفق الإخراج* 3. اكتب محتويات الملف إلى دفق الإخراج* 4. OutputStream Out ؛ Try {Socket = New Socket ("127.0.0.1" ، 5555) ؛ out = socket.getOutputStream () ؛ write2outputStream (الاسم ، Out) ؛ // استثناء capture} catch (unknownhostexception e) {E.PrintStackTrace () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } }test public void testupload () {expload ("src // status.xml") ؛ } / ** * الوظيفة: تمرير في اسم الملف ودفق الإخراج ، اكتب الملف إلى دفق الإخراج * param path * throws ioException * / private void write2outputStream (مسار السلسلة ، OutputStream) يلقي ioException {fileInputStream fis = null ؛ Byte [] buf = new byte [1024] ؛ اسم ملف السلسلة = "" ؛ // منطق الأعمال حاول {// 1. اكتب اسم الملف اسم الملف = path.substring (path.lastindexof ('//')+1) ؛ System.out.println ("اسم الملف الذي تريد تحميله هو:"+اسم الملف) ؛ out.write (filename.getBytes ()) ؛ out.write ('/n') ؛ // 2. اكتب محتوى الملف fis = جديد fileInputStream (path) ؛ int len ؛ بينما ((len = fis.read (buf))! =-1) {out.write (buf ، 0 ، len) ؛ } out.flush () ؛ // استثناء معالجة} catch (ioException e) {E.PrintStackTrace () ؛ // أغلق المورد} أخيرًا {fis.close () ؛ out.close () ؛ }} // نهاية التحميل test public void testWrite2outputStream () يلقي ioException {bytearrayoutputstream out = null ؛ حاول {out = new ByTearRayOutputStream () ؛ write2outputStream ("src // status.xml" ، out) ؛ System.out.println (Out.ToString ("UTF-8")) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {out.close () ؛ }}}تم تجميع هذه المقالة في "ملخص لتقنيات تشغيل Java Upload" ، وكل شخص مرحب به للتعلم والقراءة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.