تقدم هذه المقالة حالة نقل الملفات المستندة إلى Java Socket ، ويتم مشاركتها معك للرجوع إليها. المحتوى المحدد كما يلي
1. كود جافا
حزمة com.wf.demo.socket.socketfile ؛ استيراد java.net.*؛ استيراد java.io.*؛ / ** * 2. COOKET'S UTIL HELPER CLASS * * Author Willson * */ Public Class Clientsocket {private String IP ؛ منفذ الباحث الخاص ؛ مقبس المقبس الخاص = فارغ ؛ DataOutputStream Out = null ؛ datainputStream getMessageStream = null ؛ Publicsocket (سلسلة IP ، منفذ int) {this.ip = ip ؛ this.port = port ؛ } / ** * إنشاء اتصال المقبس * * Throws استثناء * استثناء * / public void createConnection () يلقي الاستثناء {try {socket = new Socket (IP ، port) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ if (socket! = null) socket.close () ؛ رمي ه ؛ } أخيرًا {}} // أرسل رسالة public void sendMessage (String sendMessage) يلقي الاستثناء {try {out = new dataOtputStream (socket.getOutputStream ()) ؛ if (sendMessage.equals ("windows")) {out.writeByte (0x1) ؛ out.flush () ؛ يعود؛ } if (sendMessage.equals ("unix")) {out.writeByte (0x2) ؛ out.flush () ؛ يعود؛ } if (sendMessage.equals ("linux")) {out.writeByte (0x3) ؛ out.flush () ؛ } آخر {out.writeutf (sendMessage) ؛ out.flush () ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ if (out! = null) out.close () ؛ رمي ه ؛ } أخيرًا {}} // قبول رسالة DatainputStream getMessageStream () يلقي استثناء {try {getMessageStream = جديد datainputStream (جديد bufferedInputStream (socket.getInputStream ())) ؛ إرجاع getMessageStream. } catch (استثناء e) {E.PrintStackTrace () ؛ إذا (getMessageStream! = null) getMessageStream.close () ؛ رمي ه ؛ } أخيرًا {}} // أغلق اتصال الفراغ العام connection public stowddownConnection () {try {if (out! = null) out.close () ؛ إذا (getMessageStream! = null) getMessageStream.close () ؛ if (socket! = null) socket.close () ؛ } catch (استثناء e) {}}} 2. كود جافا
حزمة com.wf.demo.socket.socketfile ؛ استيراد java.io.bufferedInputStream ؛ استيراد java.io.datainputStream ؛ استيراد java.io.dataOutputStream ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.net.serversocket ؛ استيراد java.net.socket ؛ / ** * 1. Server Side * * Author Willson * */ public Class Servertest {int port = 8821 ؛ void start () {Socket Socket = null ؛ جرب {serversocket severocket = new servers (port) ؛ بينما (صحيح) {// حدد الملف لنقل سلسلة filePath = "e: //lib.zip" ؛ ملف fi = ملف جديد (filePath) ؛ System.out.println ("اسم الملف:" + fi.getName () + "؛/tfile size ():" + (int) fi.length () + "bytes") ؛ // مقبس عام قبول () يلقي // ioException يستمع إلى ويقبل الاتصالات بهذا المقبس. هذه الطريقة تمنع حتى يتم الاتصال. System.out.println ("في انتظار الاتصال العميل ، منفذ الاتصال:" + منفذ) ؛ Socket = serversocket.accept () ؛ System.out.println ("إنشاء Socket Link") ؛ DatainputStream dis = جديد datainputStream (جديد bufferedInputStream (socket.getInputStream ())) ؛ dis.readbyte () ؛ DatainputStream Fis = جديد DatainputStream (جديد BufferedInputStream (FileInputStream جديد (FilePath))) ؛ DataOutputStream PS = جديد DataOutputStream (Socket.getOutputStream ()) ؛ // تمرير اسم الملف وطول العميل. للتطبيق حقًا على جميع المنصات ، مثل معالجة الأسماء الصينية ، يجب معالجتها أيضًا. للحصول على تفاصيل ، يرجى الرجوع إلى التفكير في Java // هناك رمز جاهز في الرابع. ps.writeutf (fi.getName ()) ؛ ps.flush () ؛ ps.Writelong ((long) fi.length ()) ؛ ps.flush () ؛ int مخزن مؤقت = 8192 ؛ byte [] buf = new byte [bufferSize] ؛ بينما (صحيح) {int read = 0 ؛ if (fis! = null) {read = fis.read (buf) ؛ } if (read == -1) {break ؛ } ps.write (buf ، 0 ، read) ؛ } ps.flush () ؛ // انتبه لإغلاق رابط المقبس ، وإلا فإن العميل سينتظر حتى تأتي بيانات الخادم ، // حتى مهلة المقبس ، مما يؤدي إلى بيانات غير مكتملة. fis.close () ؛ socket.close () ؛ System.out.println ("نقل الملف مكتمل/n") ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} public static void main (string arg []) {new Servertest (). start () ؛ }}
3. العميل
حزمة com.wf.demo.socket.socketfile ؛ استيراد java.io.bufferedOutputStream ؛ استيراد java.io.datainputStream ؛ استيراد java.io.dataOutputStream ؛ استيراد java.io.fileOutputStream ؛ / ** * 3. Client * * Author Willson * */ public ClientTest {private clientsocket cs = null ؛ سلسلة خاصة IP = "LocalHost" ؛ // تعيين إلى Server IP Private Int Port = 8821 ؛ سلسلة خاصة sendMessage = "Windwos" ؛ Public ClientTest () {try {if (createConnection ()) {sendMessage () ؛ getMessage ("f: //") ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ }} خاص Boolean CreateConnection () {cs = new clientsocket (IP ، port) ؛ حاول {cs.createConnection () ؛ System.out.print ("متصل بالخادم بنجاح!" + "/n") ؛ العودة صحيح. } catch (استثناء e) {system.out.print ("فشل الاتصال بالخادم!" + "/n") ؛ العودة كاذبة }} private void sendMessage () {if (cs == null) return ؛ حاول {cs.sendMessage (sendMessage) ؛ } catch (استثناء e) {system.out.print ("فشل إرسال الرسالة!" + "/n") ؛ }} private void getMessage (String SavePath) {if (cs == null) return ؛ datainputStream inputStream = null ؛ حاول {inputStream = cs.getMessageStream () ؛ } catch (استثناء e) {system.out.print ("تلقي خطأ ذاكرة التخزين المؤقت/n") ؛ يعود؛ } جرب {// محلي حفظ المسار ، سيرث اسم الملف تلقائيًا من جانب الخادم. int مخزن مؤقت = 8192 ؛ byte [] buf = new byte [bufferSize] ؛ int passedlen = 0 ؛ Long Len = 0 ؛ SavePath += inputStream.Readutf () ؛ dataOutputStream fileOut = جديد dataOutputStream (جديد bufferedoutputstream (جديد bufferedoutputstream (fileOutputStream جديد (SavePath))))) ؛ len = inputStream.readlong () ؛ System.out.println ("size file ():" + len + "bytes") ؛ System.out.println ("ابدأ تلقي الملفات!" + "/n") ؛ بينما (صحيح) {int read = 0 ؛ if (inputStream! = null) {read = inputStream.Read (buf) ؛ } passedlen += read ؛ if (read == -1) {break ؛ } // شريط التقدم التالي مصنوع من شريط التقدم للواجهة الرسومية. إذا كنت تكتب ملفًا هنا ، فقد تتم طباعة بعض النسب المئوية بشكل متكرر. fileout.write (buf ، 0 ، read) ؛ } system.out.println ("تم استلامه ، تم حفظ الملف كـ" + savePath + "/n") ؛ fileout.close () ؛ } catch (استثناء e) {system.out.println ("تلقي خطأ الرسالة" + "/n") ؛ يعود؛ }} public static void main (string arg []) {new ClientTest () ؛ }}آمل أن يكون هذا المقال مفيدًا للجميع لتعلم برمجة Java.