2009-07-10 7 views
9

मुझे एक साधारण एप्लिकेशन की आवश्यकता है, अधिमानतः एक क्रॉस-प्लेटफॉर्म वाला, जो दो कंप्यूटरों के बीच फ़ाइलों को भेजने में सक्षम बनाता है।जावा का उपयोग कर नेटवर्क पर फ़ाइलों को एक कंप्यूटर से दूसरे स्थानांतरित करने के लिए कैसे करें?

इसे केवल फाइलों को स्वीकार करने और भेजने की आवश्यकता है, और एक प्रगति पट्टी दिखाएं। मैं किस एप्लिकेशन का उपयोग कर सकता हूं या मैं कैसे लिख सकता हूं?

+0

के माध्यम से कुशल डेटा स्थानांतरण की व्याख्या करता है क्या आप फ़ाइल को धक्का दे रहे हैं या खींच रहे हैं? अपलोड या डाउनलोड कर रहा है? –

उत्तर

4

भेजा जा रहा है और फ़ाइलें

भेजने और एक फ़ाइल प्राप्त प्राप्त मूल रूप से कोड के दो सरल टुकड़े करने के लिए टूट जाती है।

प्राप्त कोड:

ServerSocket serverSoc = new ServerSocket(LISTENING_PORT); 

Socket connection = serverSoc.accept(); 

// code to read from connection.getInputStream(); 

भेजा जा रहा है कोड:

File fileToSend; 
InputStream fileStream = new BufferedInputStream(fileToSend); 

Socket connection = new Socket(CONNECTION_ADDRESS, LISTENING_PORT); 
OutputStream out = connection.getOutputStream(); 

// my method to move data from the file inputstream to the output stream of the socket 
copyStream(fileStream, out); 

कोड का टुकड़ा भेजने कंप्यूटर कोड भेज रहा है, जब वे एक फ़ाइल भेजना चाहते हैं पर दौड़ा दिया जाएगा।

प्राप्त करने वाले कोड को लूप के अंदर रखा जाना चाहिए, ताकि जब भी कोई सर्वर से कनेक्ट करना चाहता है, सर्वर अनुरोध को संभाल सकता है और फिर serverSoc.accept() पर प्रतीक्षा करने के लिए वापस जा सकता है।

दोनों कंप्यूटरों के बीच फ़ाइलों को भेजने की अनुमति देने के लिए, प्रत्येक कंप्यूटर को आने वाली फ़ाइलों को सुनने के लिए सर्वर (कोड प्राप्त करना) चलाने की आवश्यकता होगी, और जब वे फ़ाइल भेजना चाहते हैं तो उन्हें दोनों को कोड भेजने की आवश्यकता होगी।

प्रगति बार

JProgressBar स्विंग में काफी आसान उपयोग करने के लिए है।हालांकि, इसे ठीक से काम करने और फ़ाइल स्थानांतरण की वर्तमान प्रगति दिखाने के लिए थोड़ा और मुश्किल है।

किसी प्रपत्र पर दिखाने के लिए प्रगति पट्टी प्राप्त करने के लिए केवल इसे JFrame पर छोड़ना और शायद setIndeterminate(false) पर सेट करना शामिल है, इसलिए टोपी यह दिखाती है कि आपका प्रोग्राम काम कर रहा है।

एक प्रगति पट्टी को सही ढंग से लागू करने के लिए आपको SwingWorker का अपना कार्यान्वयन बनाना होगा। जावा ट्यूटोरियल का उनके lesson in concurrency में इसका एक अच्छा उदाहरण है।

हालांकि यह अपने आप पर एक काफी मुश्किल मुद्दा है। अगर आपको इसके साथ और मदद की ज़रूरत है तो मैं इसे अपने स्वयं के प्रश्न में पूछने की सलाह दूंगा।

http://www.home.unix-ag.org/simon/woof.html

+0

@jjinguy अगर कंप्यूटर LAN में नहीं हैं तो CONNECTION_ADDRESS के लिए हमें क्या आईपी पता रखना चाहिए? उदाहरण के लिए, मेरा बाहरी आईपी पता 1.2.3.4 है, लेकिन यदि आप CONNECTION_ADDRESS के रूप में 1.2.3.4 डालते हैं, तो राउटर को यह जानने के लिए कैसे जा रहा है कि कौन सा कंप्यूटर (मेरे घर नेटवर्क के भीतर) पैकेट को अग्रेषित करने के लिए? – Pacerier

+0

@Pacerier आपके राउटर को आपके लिए पता अनुवाद संभालना चाहिए। – jjnguy

+0

@jjinguy, हाँ, लेकिन प्रेषक को कैसे पता होना चाहिए * कौन सा * पैकेट को पैकेट भेजने के लिए यह सही ढंग से रूट किया जाएगा? http://superuser.com/questions/483033/how-does-peer-to-peer-work-over-the-internet – Pacerier

1

आप जावा में सॉकेट प्रोग्रामिंग का उपयोग करके एक लिख सकते हैं। आपको एक सर्वर और क्लाइंट प्रोग्राम लिखना होगा। कनेक्शन कनेक्शन सुनने के लिए सर्वर सर्वरस्केट का उपयोग करेगा, और क्लाइंट निर्दिष्ट पोर्ट पर उस सर्वर से कनेक्ट करने के लिए सॉकेट का उपयोग करेगा। http://www.javaworld.com/jw-12-1996/jw-12-sockets.html

+0

पहिया को फिर से क्यों शुरू करें? –

+0

क्यों नहीं? यह करने के लिए बहुत तेज़ है, और यह जावा में होगा। – AlbertoPL

+0

मैंने अभी किया है! – jjnguy

0

चेक बाहर this ट्यूटोरियल, यह एक सच में बुनियादी उदाहरण है:

यहाँ एक ट्यूटोरियल है। आप शायद वास्तविक फ़ाइल भेजने से पहले नियंत्रण शीर्षलेख भी भेजना चाहते हैं, जिसमें फ़ाइल का आकार, फ़ाइल नाम, इत्यादि शामिल हैं

वैकल्पिक रूप से, इसे this प्रोजेक्ट जैसे मौजूदा प्रोटोकॉल पर आधारित करें।

+0

धन्यवाद यही वह है जिसे मैं ढूंढ रहा था। –

3

मैं दृढ़ता से एफ़टीपी का उपयोग करने पर विचार करता हूं। अपाचे एक एफ़टीपी client और एक server

संपादन: HTTP के spdenne के सुझाव भी अच्छा है, अगर नहीं, आप Tiny Java Web Server की तरह कुछ का उपयोग कर सकते खासकर अगर हर कोई जावा 6. है।

+0

हाँ मैं कर सकता था .. लेकिन मैं जितना संभव हो सके उतना सरल चाहता था ताकि शुरुआती लोगों को कुछ भी इंस्टॉल न करने की आवश्यकता हो ... जावा स्थापित करने के अलावा जो मुझे लगता है कि ज्यादातर लोगों के पास पहले से ही है। –

+2

आपको निश्चित रूप से जेआरई के ऊपर और ऊपर कोड की आवश्यकता होगी। एकमात्र सवाल यह है कि क्या आप स्वयं कोड को लिख रहे हैं, या मौजूदा पुस्तकालयों का उपयोग कर रहे हैं। यदि आप इसे स्वयं लिखते हैं, तो यह शायद गैर-मानक होगा और आपको इसे स्वयं बनाए रखना होगा। –

0

क्या आप अपनी मशीनों में से एक (एफ़टीपी) स्थापित कर सकते हैं?

यदि आप कर सकते हैं, तो आपको केवल एक एफ़टीपी क्लाइंट (उदाहरण के लिए फ़ाइलज़िला, जिसमें प्रगति पट्टी है) का उपयोग करना होगा।

1

सूर्य के जावा 6 में हल्के वजन HTTP server API और कार्यान्वयन शामिल हैं। इसे प्राप्त करने के लिए URLConnection का उपयोग करके, आप अपनी फ़ाइल की सेवा के लिए इसका आसानी से उपयोग कर सकते हैं।

7

Woof एक शांत Python स्क्रिप्ट है जो आप के लिए काम कर सकते हैं है। ये लिनक्स पर मानक हैं, आमतौर पर यूनिक्स पर उपलब्ध हैं और साइगविन के तहत विंडोज़ पर चल सकते हैं, हालांकि आप विंडोज-नेटिव ऐप ढूंढ सकते हैं जो इसे भी कर सकते हैं। (पुटी एक एससीपी ग्राहक के रूप में काम कर सकते हैं)।

किसी भी प्रकार के पीसी-टू-पीसी फ़ाइल स्थानांतरण के लिए, आपको गंतव्य पीसी पर श्रोता होना चाहिए। यह एक डेमॉन ऐप (या विंडोज सिस्टम प्रोसेस) हो सकता है, या यह यूनिक्स-शैली "सुपरसर्वर" हो सकता है जो वास्तविक फ़ाइल-कॉपी ऐप को लोड और चलाने के लिए कॉन्फ़िगर किया गया है जब कोई श्रवण बंदरगाह से संपर्क करता है।

एससीपी और आरएसआईएनसी मोड में से एक के लिए यह आवश्यक है कि कुछ प्रकार की दूरस्थ लॉगिन क्षमता हो। Rsync संसाधन भी प्रकाशित कर सकता है कि यह निर्देशिका को संभालेगा। चूंकि विंडोज़ "रिमोट लॉग इन" की अवधारणा अच्छी तरह से स्थापित नहीं है क्योंकि यह लिनक्स के तहत है, यह बेहतर हो सकता है। इसके अलावा यह फाइल सिस्टम के किसी भी (अधिकृत) भाग तक पहुंच की इजाजत देने के बजाय गंतव्य मशीन पर परिभाषित स्रोतों/लक्ष्यों तक दूरस्थ पहुंच को सीमित करता है।

0

दो लोकप्रिय क्षुधा "SCP" और "rsync" कर रहे हैं:

0

नेटवर्क पर अधिक कुशलता से स्थानांतरित करने के लिए। this article पर एक नज़र डालें जो शून्य प्रति

संबंधित मुद्दे

 संबंधित मुद्दे