mobile to mobile data transfer

Connect to mobile without Physical server or Share data between mobile without Server.

 

if you want to do this without using any physical server machine, then you need to make one of mobile as server & another mobile as client.

 

Server Program:

package com.mypackage;

import android.content.Context; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.text.format.Formatter; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat;
public class ServerActivity extends AppCompatActivity implements View.OnClickListener {
   
private ServerSocket serverSocket;     private Socket tempClientSocket;     Thread serverThread = null;     public static final int SERVER_PORT = 3003;     private LinearLayout msgList;     private Handler handler;     private int greenColor;     private EditText edMessage;     Button startServer;
   
@Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_server);         setTitle("Server");         greenColor = ContextCompat.getColor(this, R.color.green);         handler = new Handler();         msgList = findViewById(R.id.msgList);         edMessage = findViewById(R.id.edMessage);         startServer = (Button) findViewById(R.id.start_server);     }
   
public TextView textView(String message, int color) {         if (null == message || message.trim().isEmpty()) {             message = "<Empty Message>";         }         TextView tv = new TextView(this);         tv.setTextColor(color);         tv.setText(message + " [" + getTime() +"]");         tv.setTextSize(20);         tv.setPadding(0, 5, 0, 0);         return tv;     }

   
public void showMessage(final String message, final int color) {
       
handler.post(new Runnable() {
           
@Override
           
public void run() {
                
msgList.addView(textView(message, color));
            }
        });
    }

   
@Override
   
public void onClick(View view) {
       
if (view.getId() == R.id.start_server) {
           
msgList.removeAllViews();
            showMessage(
"Server Started.", Color.BLACK);
            startServer.setVisibility(View.GONE);
           
this.serverThread = new Thread(new ServerThread());
           
this.serverThread.start();
           
return;
        }
       
if (view.getId() == R.id.send_data) {
            String msg =
edMessage.getText().toString().trim();
            showMessage(
"Server : " + msg, Color.BLUE);
            sendMessage(msg);
        }
    }

   
private void sendMessage(final String message) {
       
try {
           
if (null != tempClientSocket) {
                
new Thread(new Runnable() {
                   
@Override
                   
public void run() {
                        PrintWriter out =
null;
                       
try {
                            out =
new PrintWriter(new BufferedWriter(
                                    
new OutputStreamWriter(tempClientSocket.getOutputStream())),
                                   
true);
                        }
catch (IOException e) {
                            e.printStackTrace();
                        }
                        out.println(
message);
                    }
                }).start();
            }
        }
catch (Exception e) {
            e.printStackTrace();
        }
    }

   
class ServerThread implements Runnable {

       
public void run() {
            Socket socket;
           
try {
               
serverSocket = new ServerSocket(SERVER_PORT);
           
} catch (IOException e) {
                e.printStackTrace();
                showMessage(
"Error Starting Server : " + e.getMessage(), Color.RED);
            }
           
if (null != serverSocket) {
               
while (!Thread.currentThread().isInterrupted()) {
                   
try {
                        socket =
serverSocket.accept();
                        CommunicationThread commThread =
new CommunicationThread(socket);
                       
new Thread(commThread).start();
                    }
catch (IOException e) {
                        e.printStackTrace();
                        showMessage(
"Error Communicating to Client :" + e.getMessage(), Color.RED);
                    }
                }
            }
        }
    }
   
public String getLocalIpAddress() {
       
try {
           
boolean WIFI = false;
           
boolean MOBILE = false;
            ConnectivityManager CM = (ConnectivityManager) getSystemService(Context.
CONNECTIVITY_SERVICE);
            NetworkInfo[] networkInfo = CM.getAllNetworkInfo();
           
for (NetworkInfo netInfo : networkInfo) {
               
if (netInfo.getTypeName().equalsIgnoreCase("WIFI"))
                   
if (netInfo.isConnected())
                        WIFI =
true;
               
if (netInfo.getTypeName().equalsIgnoreCase("MOBILE"))
                   
if (netInfo.isConnected())
                        MOBILE =
true;
            }
           
if(WIFI == true)
            {
               
return GetDeviceipWiFiData();
            }
           
if(MOBILE == true)
            {
               
return GetDeviceipMobileData();
            }
        }
catch (Exception ex) {
            ex.printStackTrace();
        }
       
return null;
    }
   
public String GetDeviceipMobileData(){
       
try {
           
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
                 en.hasMoreElements();) {
                NetworkInterface networkinterface = en.nextElement();
               
for (Enumeration<InetAddress> enumIpAddr = networkinterface.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                   
if (!inetAddress.isLoopbackAddress()) {
                       
return inetAddress.getHostAddress().toString();
                    }
                }
            }
        }
catch (Exception ex) {
            ex.printStackTrace();
        }
       
return null;
    }

   
public String GetDeviceipWiFiData()
    {
        WifiManager wm = (WifiManager) getApplicationContext().getSystemService(
WIFI_SERVICE);
       
@SuppressWarnings("deprecation")
        String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
       
return ip;
    }


   
class CommunicationThread implements Runnable {

       
private Socket clientSocket;

       
private BufferedReader input;

       
public CommunicationThread(Socket clientSocket) {
           
this.clientSocket = clientSocket;
           
tempClientSocket = clientSocket;
           
try {
               
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
            }
catch (IOException e) {
                e.printStackTrace();
                showMessage(
"Error Connecting to Client!!", Color.RED);
            }
            showMessage(
"Connected to Client!!", greenColor);
        }

       
public void run() {

           
while (!Thread.currentThread().isInterrupted()) {
               
try {
                    String read =
input.readLine();
                   
if (null == read || "Disconnect".contentEquals(read)) {
                        Thread.interrupted();
                        read =
"Client Disconnected";
                        showMessage(
"Client : " + read, greenColor);
                       
break;
                    }
                    showMessage(
"Client : " + read, greenColor);
                }
catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }

    }

    String getTime() {
        SimpleDateFormat sdf =
new SimpleDateFormat("HH:mm:ss");
       
return sdf.format(new Date());
    }

   
@Override
   
protected void onDestroy() {
       
super.onDestroy();
       
if (null != serverThread) {
            sendMessage(
"Disconnect");
           
serverThread.interrupt();
           
serverThread = null;
        }
    }
}

 

 

 

 

Client Program:

 

package com.mypackage;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;

import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

public class ClientActivity extends AppCompatActivity implements View.OnClickListener {

   
public static final int SERVERPORT = 3003;

   
public static final String SERVER_IP = "fe80::8837:4aff:fe7e:97d0%dummy0";//"YOUR_SERVER_IP";
   
private ClientThread clientThread;
   
private Thread thread;
   
private LinearLayout msgList;
   
private Handler handler;
   
private int clientTextColor;
   
private EditText edMessage;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
client_activity);

        setTitle(
"Client");
       
clientTextColor = ContextCompat.getColor(this, R.color.green);
       
handler = new Handler();
        
msgList = findViewById(R.id.msgList);
       
edMessage = findViewById(R.id.edMessage);
    }

   
public TextView textView(String message, int color) {
       
if (null == message || message.trim().isEmpty()) {
            message =
"<Empty Message>";
        }
        TextView tv =
new TextView(this);
        tv.setTextColor(color);
        tv.setText(message +
" [" + getTime() + "]");
        tv.setTextSize(
20);
        tv.setPadding(
0, 5, 0, 0);
       
return tv;
    }

   
public void showMessage(final String message, final int color) {
       
handler.post(new Runnable() {
           
@Override
           
public void run() {
               
msgList.addView(textView(message, color));
            }
        });
    }

   
@Override
   
public void onClick(View view) {

       
if (view.getId() == R.id.connect_server) {
           
msgList.removeAllViews();
            showMessage(
"Connecting to Server...", clientTextColor);
           
clientThread = new ClientThread();
           
thread = new Thread(clientThread);
           
thread.start();
            showMessage(
"Connected to Server...", clientTextColor);
           
return;
        }

       
if (view.getId() == R.id.send_data) {
            String clientMessage =
edMessage.getText().toString().trim();
            showMessage(clientMessage, Color.
BLUE);
           
if (null != clientThread) {
               
clientThread.sendMessage(clientMessage);
            }
        }
    }

   
class ClientThread implements Runnable {

       
private Socket socket;
       
private BufferedReader input;

       
@Override
       
public void run() {

           
try {
                InetAddress serverAddr = InetAddress.getByName(
SERVER_IP);
               
socket = new Socket(serverAddr, SERVERPORT);
               
while (!Thread.currentThread().isInterrupted()) {
                   
this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String message =
input.readLine();
                   
if (null == message || "Disconnect".contentEquals(message)) {
                        Thread.interrupted();
                        message =
"Server Disconnected.";
                        showMessage(message, Color.
RED);
                       
break;
                    }
                    showMessage(
"Server: " + message, clientTextColor);
                }

            }
catch (UnknownHostException e1) {
                e1.printStackTrace();
            }
catch (IOException e1) {
                e1.printStackTrace();
            }

        }

       
void sendMessage(final String message) {
           
new Thread(new Runnable() {
               
@Override
               
public void run() {
                   
try {
                       
if (null != socket) {
                            PrintWriter out =
new PrintWriter(new BufferedWriter(
                                   
new OutputStreamWriter(socket.getOutputStream())),
                                   
true);
                            out.println(
message);
                        }
                    }
catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

    }

    String getTime() {
        SimpleDateFormat sdf =
new SimpleDateFormat("HH:mm:ss");
       
return sdf.format(new Date());
    }

   
@Override
   
protected void onDestroy() {
       
super.onDestroy();
       
if (null != clientThread) {
           
clientThread.sendMessage("Disconnect");
           
clientThread = null;
        }
    }
}