I have an Android app where I'd like to send data between 2 devices using Android's WiFi Direct P2P feature. My app is created based on WiFi Direct Demo. The problem is, I want to send data from the my server (group owner) to the client but some how connection is refused.

java.net.ConnectException: failed to connect to /192.168.49.1 (port 9999) from /192.168.49.195 (port 35364) after 2000ms: isConnected failed: ECONNREFUSED (Connection refused)

Code snippet pest is mentioned as below :

BroadCastReceiver :

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {

    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
        if (mManager != null) {
            mManager.requestPeers(mChannel, mPeersListener);
        }
    } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
        if (mManager == null) {
            return;
        }

        NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);

        if (networkInfo.isConnected()){
            WifiP2pGroup group = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP);
            List<WifiP2pDevice> clientList = new ArrayList<>(group.getClientList());

            mManager.requestConnectionInfo(mChannel, mConnectionInfoListener);
        } else {
            int c = 1;
        }
    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {

    }
}

Fragment code ::

class WifiDirectBottomSheetFragment : BottomSheetDialogFragment() {
....
var mHandler = Handler { message ->
    when (message.what) {
        1 -> {
            val readBuff = message.obj as ByteArray
            val msg = String(readBuff, 0, message.arg1)
            if (!msg.isEmpty()) {
                if (msg == SPECIAL_MSG || msg == PaymentStatus.PAYMENT_DECLINED) {
                    val disconnect = Disconnect()
                    disconnect.start()
                    Handler().postDelayed({ discoverPeers() }, 500)
                } else {
                }
                LogWriter.write("Bottomsheet :: handleMessage : $msg")
            }
        }
    }
    true
}
@RequiresApi(Build.VERSION_CODES.S)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    mManager = requireActivity().getSystemService(AppCompatActivity.WIFI_P2P_SERVICE) as WifiP2pManager
    mChannel = mManager!!.initialize(requireContext(), requireActivity().mainLooper, null)
    WiFiDirectUtils.getInstance().manager = mManager
    WiFiDirectUtils.getInstance().channel = mChannel
}

....

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    init(view)
    discover!!.setOnClickListener { discoverPeers() }
}

private fun discoverPeers() {
    adapter!!.data = ArrayList()
    progressMessage!!.text = ""
    mManager!!.discoverPeers(mChannel, object : WifiP2pManager.ActionListener {
        override fun onSuccess() {
            status!!.text = "Discovery Started"
            progressBar!!.visibility = View.VISIBLE
        }

        override fun onFailure(i: Int) {
            status!!.text = "Failed to Start Discovery"
            progressBar!!.visibility = View.INVISIBLE
        }
    })
}

private fun init(view: View) {
    ....
    mIntentFilter = IntentFilter()
    mIntentFilter!!.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION)
    mIntentFilter!!.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION)
    mIntentFilter!!.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)
    mIntentFilter!!.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION)
    discoverPeers()
}

override fun onResume() {
    super.onResume()
    Log.d("BottomSheet", "onResume")
    mPeersListener = WifiP2pManager.PeerListListener { peerList ->
        if (peerList.deviceList !== peers) {
            peers!!.clear()
            peers!!.addAll(peerList.deviceList)
        }
        if (peers != null && peers!!.isEmpty()) {
            status!!.text = "No Device Found"
            adapter!!.data = ArrayList()
        } else {
            status!!.text = peers!!.size.toString() + " Device found"
            adapter!!.data = peers
        }
        progressBar!!.visibility = View.INVISIBLE
    }
    mConnectionInfoListener =
        WifiP2pManager.ConnectionInfoListener { wifiP2pInfo ->
            LogWriter.write("Connected to device : ${p2pDeviceName}")
            showProgressView()
            val groupOwnerAddress = wifiP2pInfo.groupOwnerAddress
            isServer = wifiP2pInfo.groupFormed && wifiP2pInfo.isGroupOwner
            progressMessage!!.text =
                "Connected to " + p2pDeviceName
            //CONNECTING WITH DEVICE
            if (isServer!!) {
                serverClass = ServerClass(mHandler)
                serverClass!!.start()
                isServer = true
            } else if (wifiP2pInfo.groupFormed) {
                //            status.setText("Client");
                clientClass = ClientClass(groupOwnerAddress, mHandler)
                clientClass!!.start()
                isServer = false
            }
            Handler().postDelayed({
                val mySendReceive = MySendReceive(mVivaWalletUri)
                mySendReceive.start()
            }, 500)
        }
    mReceiver = WifiDirectBR(mPeersListener, mConnectionInfoListener)
    requireActivity().registerReceiver(mReceiver, mIntentFilter)
}

override fun onPause() {
    super.onPause()
    requireActivity().unregisterReceiver(mReceiver)
}}

I use ServerClass, ClientClass, Disconnect, SendReceive, and MySendReceive classes from the demo

0

There are 0 best solutions below