কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে Wi-Fi Pair Connection দিয়ে ফাইল ট্রান্সফার


Wi-Fi Pair Connection ব্যবহার করে ফাইল ট্রান্সফার (সার্ভার ও ক্লায়েন্ট)

এই উদাহরণে দুটি আলাদা প্রজেক্ট তৈরি করা হবে: একটি সার্ভার এবং অন্যটি ক্লায়েন্ট। সার্ভার সকেট খুলে থাকবে, ক্লায়েন্ট সংযুক্ত होकर মেসেজ এক্সচেঞ্জ করবে।

সার্ভার (Server)

ধাপ ১: নতুন প্রজেক্ট তৈরি

Android Studio-তে File → New Project যান এবং প্রয়োজনীয় বিবরণ পূরণ করুন।

ধাপ ২: লেআউট ফাইল (res/layout/activity_main.xml)

<?xml version = "1.0" encoding = "utf-8"?> <RelativeLayout xmlns:android = "https://schemas.android.com/apk/res/android"    xmlns:tools = "https://schemas.android.com/tools"    android:layout_width = "match_parent"    android:layout_height = "match_parent"    android:layout_margin = "16dp"    tools:context = ".MainActivity">    <TextView       android:id = "@+id/tvIP"       android:layout_width = "wrap_content"       android:layout_height = "wrap_content"       android:textAppearance = "@style/Base.TextAppearance.AppCompat.Medium" />    <TextView       android:id = "@+id/tvPort"       android:layout_width = "wrap_content"       android:layout_height = "wrap_content"       android:layout_below = "@+id/tvIP"       android:textAppearance = "@style/Base.TextAppearance.AppCompat.Medium" />    <TextView       android:id = "@+id/tvConnectionStatus"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_below = "@+id/tvPort"       android:textAppearance = "@style/Base.TextAppearance.AppCompat.Medium" />    <TextView       android:id = "@+id/tvMessages"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_above = "@+id/etMessage"       android:layout_below = "@+id/tvConnectionStatus"       android:inputType = "textMultiLine"       android:textAppearance = "@style/Base.TextAppearance.AppCompat.Medium" />    <EditText       android:id = "@+id/etMessage"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_above = "@+id/btnSend"       android:hint = "Enter Message"       android:inputType = "text" />    <Button       android:id = "@+id/btnSend"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_alignParentBottom = "true"       android:text = "SEND" /> </RelativeLayout>

ধাপ ৩: MainActivity.java (src/MainActivity.java)

package com.server.myapplication.server; import android.annotation.SuppressLint; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.ByteOrder; @SuppressLint("SetTextI18n") public class MainActivity extends AppCompatActivity {    ServerSocket serverSocket;    Thread Thread1 = null;    TextView tvIP, tvPort;    TextView tvMessages;    EditText etMessage;    Button btnSend;    public static String SERVER_IP = "";    public static final int SERVER_PORT = 8080;    String message;    @Override    protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);       tvIP = findViewById(R.id.tvIP);       tvPort = findViewById(R.id.tvPort);       tvMessages = findViewById(R.id.tvMessages);       etMessage = findViewById(R.id.etMessage);       btnSend = findViewById(R.id.btnSend);       try {          SERVER_IP = getLocalIpAddress();       } catch (UnknownHostException e) {          e.printStackTrace();       }       Thread1 = new Thread(new Thread1());       Thread1.start();       btnSend.setOnClickListener(new View.OnClickListener() {          @Override          public void onClick(View v) {             message = etMessage.getText().toString().trim();             if (!message.isEmpty()) {                new Thread(new Thread3(message)).start();             }          }       });    }    private String getLocalIpAddress() throws UnknownHostException {       WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);       assert wifiManager ! = null;       WifiInfo wifiInfo = wifiManager.getConnectionInfo();       int ipInt = wifiInfo.getIpAddress();       return InetAddress.getByAddress(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(ipInt).array()).getHostAddress();    }    private PrintWriter output;    private BufferedReader input;    class Thread1 implements Runnable {       @Override       public void run() {          Socket socket;          try {             serverSocket = new ServerSocket(SERVER_PORT);             runOnUiThread(new Runnable() {                @Override                public void run() {                   tvMessages.setText("Not connected");                   tvIP.setText("IP: " + SERVER_IP);                   tvPort.setText("Port: " + String.valueOf(SERVER_PORT));                }             });             try {                socket = serverSocket.accept();                output = new PrintWriter(socket.getOutputStream());                input = new BufferedReader(new InputStreamReader(socket.getInputStream()));                runOnUiThread(new Runnable() {                   @Override                   public void run() {                      tvMessages.setText("Connected\n");                   }                });                new Thread(new Thread2()).start();             } catch (IOException e) {                e.printStackTrace();             }          } catch (IOException e) {             e.printStackTrace();          }       }    }    private class Thread2 implements Runnable {       @Override       public void run() {          while (true) {             try {                final String message = input.readLine();                if (message ! = null) {                   runOnUiThread(new Runnable() {                      @Override                      public void run() {                         tvMessages.append("client:" + message + "\n");                      }                   });                } else {                   Thread1 = new Thread(new Thread1());                   Thread1.start();                   return;                }             } catch (IOException e) {                e.printStackTrace();             }          }       }    }    class Thread3 implements Runnable {       private String message;       Thread3(String message) {          this.message = message;       }       @Override       public void run() {          output.write(message);          output.flush();          runOnUiThread(new Runnable() {             @Override             public void run() {                tvMessages.append("server: " + message + "\n");                etMessage.setText("");             }          });       }    } }

ধাপ ৪: AndroidManifest.xml (সার্ভার)

<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns:android = "https://schemas.android.com/apk/res/android"    package = "com.example.myapplication">    <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name = "android.permission.INTERNET"/>    <application       android:allowBackup = "true"       android:icon = "@mipmap/ic_launcher"       android:label = "@string/app_name"       android:roundIcon = "@mipmap/ic_launcher_round"       android:supportsRtl = "true"       android:theme = "@style/AppTheme">       <activity android:name = ".MainActivity"          android:label = "Server">          <intent-filter>             <action android:name = "android.intent.action.MAIN" />             <category android:name = "android.intent.category.LAUNCHER" />          </intent-filter>       </activity>    </application> </manifest>

ক্লায়েন্ট (Client)

ধাপ ১: নতুন প্রজেক্ট তৈরি

আরেকটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট ফাইল (res/layout/activity_main.xml)

<?xml version = "1.0" encoding = "utf-8"?> <RelativeLayout xmlns:android = "https://schemas.android.com/apk/res/android"    xmlns:tools = "https://schemas.android.com/tools"    android:layout_width = "match_parent"    android:layout_height = "match_parent"    android:layout_margin = "16dp"    tools:context = ".MainActivity">    <EditText       android:id = "@+id/etIP"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:hint = "IP-Address"       android:inputType = "text" />    <EditText       android:id = "@+id/etPort"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_below = "@+id/etIP"       android:hint = "Port No"       android:inputType = "number" />    <Button       android:id = "@+id/btnConnect"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_below = "@+id/etPort"       android:layout_gravity = "center"       android:layout_marginTop = "16dp"       android:text = "Connect To Server" />    <TextView       android:id = "@+id/tvMessages"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_above = "@+id/etMessage"       android:layout_below = "@+id/btnConnect"       android:inputType = "textMultiLine"       android:textAppearance = "@style/Base.TextAppearance.AppCompat.Medium" />    <EditText       android:id = "@+id/etMessage"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_above = "@+id/btnSend"       android:hint = "Enter Message"       android:inputType = "text" />    <Button       android:id = "@+id/btnSend"       android:layout_width = "match_parent"       android:layout_height = "wrap_content"       android:layout_alignParentBottom = "true"       android:text = "SEND" /> </RelativeLayout>

ধাপ ৩: MainActivity.java (src/MainActivity.java)

package com.client.myapplication.client; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; @SuppressLint("SetTextI18n") public class MainActivity extends AppCompatActivity {    Thread Thread1 = null;    EditText etIP, etPort;    TextView tvMessages;    EditText etMessage;    Button btnSend;    String SERVER_IP;    int SERVER_PORT;    @Override    protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);       etIP = findViewById(R.id.etIP);       etPort = findViewById(R.id.etPort);       tvMessages = findViewById(R.id.tvMessages);       etMessage = findViewById(R.id.etMessage);       btnSend = findViewById(R.id.btnSend);       Button btnConnect = findViewById(R.id.btnConnect);       btnConnect.setOnClickListener(new View.OnClickListener() {          @Override          public void onClick(View v) {             tvMessages.setText("");             SERVER_IP = etIP.getText().toString().trim();             SERVER_PORT = Integer.parseInt(etPort.getText().toString().trim());             Thread1 = new Thread(new Thread1());             Thread1.start();          }       });       btnSend.setOnClickListener(new View.OnClickListener() {          @Override          public void onClick(View v) {             String message = etMessage.getText().toString().trim();             if (!message.isEmpty()) {                new Thread(new Thread3(message)).start();             }          }       });    }    private PrintWriter output;    private BufferedReader input;    class Thread1 implements Runnable {       @Override       public void run() {          Socket socket;          try {             socket = new Socket(SERVER_IP, SERVER_PORT);             output = new PrintWriter(socket.getOutputStream());             input = new BufferedReader(new InputStreamReader(socket.getInputStream()));             runOnUiThread(new Runnable() {                @Override                public void run() {                   tvMessages.setText("Connected\n");                }             });             new Thread(new Thread2()).start();          } catch (IOException e) {             e.printStackTrace();          }       }    }    class Thread2 implements Runnable {       @Override       public void run() {          while (true) {             try {                final String message = input.readLine();                if (message ! = null) {                   runOnUiThread(new Runnable() {                      @Override                      public void run() {                         tvMessages.append("server: " + message + "\n");                      }                   });                } else {                   Thread1 = new Thread(new Thread1());                   Thread1.start();                   return;                }             } catch (IOException e) {                e.printStackTrace();             }          }       }    }    class Thread3 implements Runnable {       private String message;       Thread3(String message) {          this.message = message;       }       @Override       public void run() {          output.write(message);          output.flush();          runOnUiThread(new Runnable() {             @Override             public void run() {                tvMessages.append("client: " + message + "\n");                etMessage.setText("");             }          });       }    } }

ধাপ ৪: AndroidManifest.xml (ক্লায়েন্ট)

<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns:android = "https://schemas.android.com/apk/res/android"    package = "com.client.myapplication.client">    <uses-permission android:name = "android.permission.INTERNET" />    <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />    <application       android:allowBackup = "true"       android:icon = "@mipmap/ic_launcher"       android:label = "@string/app_name"       android:roundIcon = "@mipmap/ic_launcher_round"       android:supportsRtl = "true"       android:theme = "@style/AppTheme">       <activity          android:name = "com.client.myapplication.client.MainActivity"          android:label = "Client">          <intent-filter>             <action android:name = "android.intent.action.MAIN" />             <category android:name = "android.intent.category.LAUNCHER" />          </intent-filter>       </activity>    </application> </manifest>

দুইটি অ্যাপ্লিকেশন একসাথে চালান

সার্ভার ও ক্লায়েন্ট উভয় প্রজেক্ট রান করুন। সার্ভারের IP এবং পোর্ট ক্লায়েন্টে দিয়ে Connect করুন। তারপর মেসেজ পাঠানো-পাওয়া যাবে।

সার্ভার স্ক্রিনশট:

অ্যান্ড্রয়েডে Wi-Fi Pair Connection দিয়ে ফাইল ট্রান্সফার

ক্লায়েন্ট স্ক্রিনশট:

অ্যান্ড্রয়েডে Wi-Fi Pair Connection দিয়ে ফাইল ট্রান্সফার

মেসেজ এক্সচেঞ্জের পর সার্ভার:

অ্যান্ড্রয়েডে Wi-Fi Pair Connection দিয়ে ফাইল ট্রান্সফার


  1. অ্যান্ড্রয়েড থেকে পিসিতে ফাইল ট্রান্সফার: দ্রুত ও নিরাপদে ধাপে ধাপে গাইড

  2. অ্যান্ড্রয়েড ফাইল এসডি কার্ডে ট্রান্সফার: সহজ ধাপে ধাপে গাইড

  3. PC এবং অ্যান্ড্রয়েড ফোনের মধ্যে সহজে ফাইল ট্রান্সফার: ধাপে ধাপে গাইড

  4. উইন্ডোজ ১০-ে Nearby Sharing দিয়ে ফাইল শেয়ার করুন: ধাপে ধাপে গাইড