हाय मेरा अंतिम लक्ष्य दो उपकरणों के बीच एंड्रॉइड में वाईफाई सीधी एपीआई का उपयोग करके फ़ाइलों को स्थानांतरित करना है। एक बार डिवाइस क्लाइंट के रूप में कार्य करता है, तो वाईफाई सीधा एसडीके डेमो में सर्वर के रूप में कार्य करता है। इसके लिए, सर्वर पोर्ट और होस्ट पते का उपयोग करके क्लाइंट पक्ष से सॉकेट बनाना। मैं कई फाइलों को स्थानांतरित करना चाहता हूं। क्लाइंट सॉकेट कनेक्शन को स्वीकार करते समय रिसीवर पक्ष में, मुझे फ़ाइल के फ़ाइल नाम के साथ फ़ाइल बनाना होगा जो क्लाइंट साइड से भेजा गया है। लेकिन मैं सर्वर पक्ष से फ़ाइल नाम नहीं जानता।एंड्रॉइड में वाईफाई डायरेक्ट मोड के माध्यम से स्थानांतरित की जाने वाली फ़ाइल का फ़ाइल नाम कैसे ढूंढें?
तो एकाधिक फ़ाइल स्थानांतरण के लिए इस वाईफाई प्रत्यक्ष स्थानांतरण मोड के लिए सॉकेट कनेक्शन का उपयोग करके फ़ाइल नाम कैसे भेजें।
सर्वर पोर्ट और मेजबान पते का उपयोग कर ग्राहक की ओर से सॉकेट बनाना:
ServerSocket serverSocket = new ServerSocket(8988);
Log.d(WifiDirectActivity.TAG, "Server: Socket opened");
Socket client = serverSocket.accept();
Log.d(WifiDirectActivity.TAG,
"Server: connection done with client");
final File f = new File(
Environment.getExternalStorageDirectory() + "/"
+ context.getPackageName() + "/wifip2pshared-"
+ "sample");
File dirs = new File(f.getParent());
if (!dirs.exists())
dirs.mkdirs();
f.createNewFile();
Log.d(WifiDirectActivity.TAG,
"server: copying files " + f.toString());
InputStream inputstream = client.getInputStream();
copyFile(inputstream, new FileOutputStream(f));
serverSocket.close();
सच में फ़ाइल नाम देने पर मारा:
fileUris = intent.getExtras().getParcelableArrayList(EXTRA_STREAM);
String host = intent.getExtras().getString(
EXTRAS_GROUP_OWNER_ADDRESS);
Socket socket = new Socket();
int port = intent.getExtras().getInt(EXTRAS_GROUP_OWNER_PORT);
try {
Log.d(WifiDirectActivity.TAG, "Opening client socket - ");
socket.bind(null);
socket.connect((new InetSocketAddress(host, port)),
SOCKET_TIMEOUT);
Log.d(WifiDirectActivity.TAG,
"Client socket - " + socket.isConnected());
OutputStream stream = socket.getOutputStream();
ContentResolver cr = context.getContentResolver();
InputStream is = null;
for (int i = 0; i < fileUris.size(); i++) {
Uri uri = fileUris.get(0);
try {
is = cr.openInputStream(Uri.parse(uri.toString()));
} catch (FileNotFoundException e) {
Log.d(WifiDirectActivity.TAG, e.toString());
}
DeviceDetailFragment.copyFile(is, stream);
Log.d(WifiDirectActivity.TAG, "Client: Data written");
}
ग्राहक गर्तिका कनेक्शन प्रपत्र सर्वर साइड स्वीकारना फ़ाइल निर्माण पर रिसीवर पक्ष। इसके साथ फ़ाइल नाम भेजने का कोई तरीका है। कृपया इस पर मेरी सहायता करें। अग्रिम में धन्यवाद।
यदि ऐसा करने का मेरा तरीका आपकी ज़रूरत के अनुरूप है, तो कृपया इसे स्वीकार किए गए उत्तर के रूप में ध्वजांकित करें, ताकि यह दूसरों के लिए भी संदर्भ हो। धन्यवाद। – Sebastiano