Как подключить устройство android с Bluetooth в качестве сервера к 4 клиентским устройствам и получить отправку данных на сервер - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу создать два приложения в android java, подключаться через Bluetooth и отправлять и получать данные. Я уже реализую оба приложения. но проблема в том, когда я хочу подключить более одного клиента к приложению сервера и отправить данные со всех клиентов на сервер. но сервер может получить данные только от первого клиента. прежде чем я услышал, что один сервер может подключиться к пяти клиентам одновременно. это правильно?

 private class Server extends Thread {

    private BluetoothServerSocket serverSocket;

    public Server() {
        try {
            serverSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(APP_NAME, uuid);
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void run() {
        BluetoothSocket bluetoothSocket = null;
        while (bluetoothSocket == null) {
            try {
                bluetoothSocket = serverSocket.accept();
            } catch (IOException e) {
                e.printStackTrace();
            }

            if (bluetoothSocket != null) {
                sendReceive = new SendReceive(bluetoothSocket);
                sendReceive.start();
                break;
            }
        }
    }
}


private class SendReceive extends Thread {


    private BluetoothSocket socket;
    private InputStream inputStream;
    private OutputStream outputStream;


    public SendReceive(BluetoothSocket socket1) {
        socket = socket1;
        InputStream tempIn = null;
        OutputStream tempOut = null;

        try {
            tempIn = socket.getInputStream();
            tempOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        inputStream = tempIn;
        outputStream = tempOut;

    }

    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;


        while (true){
            try {
                bytes = inputStream.read(buffer);

                Log.i(TAG, "server receive: " + new String(buffer, 0 , buffer.length).trim());
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    }

    public void write(byte[] bytes){
        try {
            outputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}


    private class Client extends Thread {

    BluetoothDevice device;
    BluetoothSocket socket;

    public Client(BluetoothDevice device1) {
        device = device1;
        try {
            socket = device.createRfcommSocketToServiceRecord(uuid);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public void run() {
        try {
            socket.connect();

            sendReceive = new SendReceive(socket);
            sendReceive.start();
        } catch (IOException e) {
            e.printStackTrace();

            Log.i("blt", "run Client  "  + e.getMessage());
        }
    }
}

private class SendReceive extends Thread {


    private BluetoothSocket socket;
    private InputStream inputStream;
    private OutputStream outputStream;


    public SendReceive(BluetoothSocket socket1) {
        socket = socket1;
        InputStream tempIn = null;
        OutputStream tempOut = null;

        try {
            tempIn = socket.getInputStream();
            tempOut = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("blt", "SendReceive  "  + e.getMessage());
        }

        inputStream = tempIn;
        outputStream = tempOut;

    }

    public void run() {
        byte[] buffer = new byte[1024];
        int bytes;


        while (true) {
            try {
                bytes = inputStream.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    }

    public void write(byte[] bytes) {
        try {
            outputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

что я должен изменить в своем коде, чтобы иметь возможность подключать более одного клиента к серверу и получать данные от всех клиентов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...