2011-10-04 9 views
5

मैं एक कोड बना रहा हूं और मैं एक और एंड्रॉइड डिवाइस पर एक एमपी 4 फ़ाइल भेजना चाहता हूं। मैं वाईफाई के माध्यम से दोनों एंड्रॉइड कनेक्ट करने के लिए पहुंच गया हूं और 1-20 से चक्र के लिए एक सरल से लिखता हूं और अन्य एंड्रॉइड डिवाइस भेजा गया नंबर पढ़ता है और प्रदर्शित करता है।एंड्रॉइड डिवाइस के बीच एक फाइल स्थानांतरित करें?

   InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
       Log.d("ClientActivity", "C: Connecting..."); 
       Socket socket = new Socket(serverAddr, port); 
       connected = true; 
       while (connected) { 
        try { 
         Log.d("ClientActivity", "C: Sending command."); 
         PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket 
            .getOutputStream())), true); 


         for (int i = 1; i < 20; i++) { 


          out.println(i); 

          i=i++; 

और "रिसीवर":

यहाँ यह "प्रेषक" के दिलचस्प हिस्सा है

serverSocket = new ServerSocket(SERVERPORT); 

         // listen for incoming clients 
         Socket client = serverSocket.accept(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()),8*1024); 

यह महान काम करता है! लेकिन मैं एक इंट के बजाए एक डिवाइस से दूसरी डिवाइस में एक फाइल भेजना चाहता हूं। मैं इसे कैसे बना सकता हूं ?????

उत्तर

1

आपको किसी प्रकार के डेटा प्रारूप के माध्यम से डेटा को डेटा में पैकेज करने की आवश्यकता है। ऐसा करने का एक तरीका सामान्य एमआईएम डेटा प्रारूप का उपयोग करना है जिसका उपयोग आमतौर पर ईमेल में अनुलग्नक भेजने के लिए किया जाता है।

मैंने the following SO Question - android add filename to bytestream में इस प्रारूप का उपयोग करके सॉकेट के माध्यम से बाइनरी भेजने से संबंधित अन्य प्रश्नों का उत्तर दिया है। आप उस प्रश्न के स्वीकृत उत्तर की जांच कर सकते हैं।

आपके संदर्भ के लिए, मैंने नीचे दिए गए प्रश्न से सॉकेट भेजने और प्राप्त करने के लिए कोड कॉपी किया है।

File f = new File(path); 
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream()); 
String filename=path.substring(path.lastIndexOf("/")+1); 

// create a multipart message 
MultipartEntity multipartContent = new MultipartEntity(); 

// send the file inputstream as data 
InputStreamBody isb = new InputStreamBody(new FileInputStream(f), "image/jpeg", filename); 

// add key value pair. The key "imageFile" is arbitrary 
multipartContent.addPart("imageFile", isb); 

multipartContent.writeTo(out); 
out.flush(); 
out.close(); 

और कोड वापस MimeBodyPart कि JavaMail का हिस्सा है का उपयोग कर नीचे इसे पढ़ने के लिए।


MimeMultipart multiPartMessage = new MimeMultipart(new DataSource() { 
    @Override 
    public String getContentType() { 
     // this could be anything need be, this is just my test case and illustration 
     return "image/jpeg"; 
    } 

    @Override 
    public InputStream getInputStream() throws IOException { 
     // socket is the socket that you get from Socket.accept() 
     BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream()); 
     return inputStream; 
    } 

    @Override 
    public String getName() { 
     return "socketDataSource"; 
    } 

    @Override 
    public OutputStream getOutputStream() throws IOException { 
     return socket.getOutputStream(); 
    } 
}); 

// get the first body of the multipart message 
BodyPart bodyPart = multiPartMessage.getBodyPart(0); 

// get the filename back from the message 
String filename = bodyPart.getFileName(); 

// get the inputstream back 
InputStream bodyInputStream = bodyPart.getInputStream(); 

// do what you need to do here.... 
+0

अच्छा !! तो मैं फ़ाइल नाम के हिस्से को अनदेखा कर दूंगा। "multipartContent.addPart (" imageFile ", isb) के लिए क्या है; " ??? और मैं एक और एंड्रॉइड फोन में फ़ाइल कैसे प्राप्त कर सकता हूं ?? आपके द्वारा निर्दिष्ट उत्तर का कारण जावामेल के लिए है ?? धन्यवाद !! – Merol

+0

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

0

एक ओपन सोर्स प्रोजेक्ट गूगल द्वारा आप इसे पर एक नज़र डालें और उपकरणों से कनेक्ट करने और उन दोनों के बीच फ़ाइलों को साझा करने के बारे में सामान्य जानकारी प्राप्त कर सकते हैं जारी किया गया है।

यहां लिंक है: android-fileshare

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