Создание ClientHandler для нескольких клиентов в сокете Server-client - PullRequest
0 голосов
/ 21 июня 2019

Я использую Android studio и могу успешно общаться между сервером и 1 клиентом.Я знаю, что мне нужно создать класс ClientHandler и создать новый поток в моем классе сервера для каждого нового подключенного клиента, но когда я пытаюсь сделать это, я не могу реализовать его должным образом.Я хочу, чтобы сервер связывался с несколькими устройствами, около 4.

Сервер

public class ServerClass extends Thread {
        Socket clientSocket;
        ServerSocket serverSocket;


        @Override
        public void run() {
            while (true) {
                try {
                    //server is listening on port 8888
                    serverSocket = new ServerSocket(8888);

                        //getting a socket for the client connected
                        clientSocket = serverSocket.accept();
                        Log.d(TAG, "Connected Clients in for loop: "+clientSocket.getPort());
                        //need to start a new thread to handle this client


                        //add client to array list

                    Log.d(TAG, "clients array list size: "+clientList.size());

                        //thread that handles sending and receving data
                       sendReceiveClass = new SendReceive(clientSocket);
                        sendReceiveClass.start();


                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }

Клиент

 public class ClientClass extends Thread {
        Socket socket;
        String hostAddress;

        public ClientClass (InetAddress hostAddress) {
            this.hostAddress = hostAddress.getHostAddress();
            socket = new Socket();
        }



        @Override
        public void run() {
            while (true) {
                try {
                    socket.connect(new InetSocketAddress(hostAddress, 8888), 500);
                    sendReceiveClass = new SendReceive(socket);
                    sendReceiveClass.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        }

Поток отправки / получения

 public class SendReceive extends Thread {
        private Socket socket;
        private InputStream inputStream;
        private OutputStream outputStream;


            public SendReceive (Socket socket) {
            this.socket = socket;
            try {
                inputStream = socket.getInputStream();
                outputStream = socket.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

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

                while (socket !=null) {
                    try {
                        bytes = inputStream.read(buffer);
                        if (bytes > 0) { //means we have a message
                            handler.obtainMessage(MESSAGE_READ,bytes,-1,buffer).sendToTarget();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            }

            public void write(byte[] bytes) {
                try {
                    outputStream.write(bytes);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...