Сервер и клиент на устройстве с включенной WiFi-точкой доступа - PullRequest
3 голосов
/ 08 февраля 2012

Можно ли включить WiFi-модем / точку доступа на телефоне Android и настроить ее как сервер, а также клиент с помощью двух разных приложений?

1 Ответ

1 голос
/ 11 июля 2017

Вам не нужно два разных приложения. Объедините две функции в одном приложении.

Используйте java.net.Socket для реализации на стороне клиента и java.net.ServerSocket для реализации на стороне сервера.

Код на стороне сервера:

Позвоните startServer(), чтобы запустить сервер, прослушивающий данные в порту 9809 (поставьте как хотите).

void startServer() throws IOException {
        new Thread(() -> {
            try {
                serverSocket = new ServerSocket(9809);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Socket socket = null;
            try {
                socket = serverSocket.accept();
            } catch (IOException e) {
                e.printStackTrace();
            }
            DataInputStream stream = null;
            try {
                if (socket != null) {
                    stream = new DataInputStream(socket.getInputStream());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            String gotdata = null;
            try {
                if (stream != null) {
                    gotdata = stream.readUTF();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                assert socket != null;
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println("THE DATA WE HAVE GOT :"+gotdata)

        }).start();

Код на стороне клиента: Здесь вы должны поместить IP-адрес устройства, выполняющего роль сервера, в строку 6 (для моего случая это было 192.168.1.100).

Позвоните sendData(), чтобы отправить данные на устройство, выполняющее роль сервера.

void sendData() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Socket socket = new Socket("192.168.1.100", 9809);
                DataOutputStream stream = new DataOutputStream(socket.getOutputStream());
                stream.writeUTF("Some data here");
                stream.flush();
                stream.close();
                socket.close();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("Done!");
                    }
                });
            } catch (Exception e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("Fail!");
                    }
                });
                e.printStackTrace();
            }
        }
    }).start();
}
...