Я делаю приложение, которое проверяет определенные соединения (ищет список SSID) и создает точку доступа для указанного соединения, если оно не находит его. В основном он должен действовать как локальная сеть. Мне удалось создать точку доступа, и после этого она прослушивает сокет сервера для входящих соединений:
Thread socketThread = new Thread(new Runnable() {
@Override
public void run() {
int port = Constants.PORT + socketList.size()-1;
try {
ServerSocket serverSocket = null;
serverSocket = new ServerSocket(port);
Log.d(TAG, "Socket listening for connections: " + port);
Socket client = serverSocket.accept();
Log.d(TAG, "Server: connection done");
InputStream inputstream = client.getInputStream();
DataInputStream commStream = new DataInputStream(inputstream);
byte[] b = new byte[16];
while (commStream.read(b,0, 16) != -1)
Log.d(TAG, new String(b, "ASCII"));
serverSocket.close();
Log.d(TAG, "Server socket done");
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
});
socketList.add(socketThread);
socketThread.start();
Если я создам точку доступа и подключусь к ней с помощью своего компьютера, я смогу использовать netcat и подключиться к указанному сокету:
netcat 192.168.43.1 8988
Где 192.168.43.1 — IP-адрес Android по умолчанию для точки доступа, а 8988 — порт, который я использую. Однако, когда я пытаюсь сделать то же самое через другое устройство, на котором запущено приложение и которое подключается к точке доступа, это не работает. Вот код клиента:
clientThread = new Thread(new Runnable() {
@Override
public void run() {
int port = Constants.PORT ;
try {
Socket socket =new Socket();
socket.bind(null);
socket.connect((new InetSocketAddress("192.168.43.1", port)), 20000);
OutputStream stream = socket.getOutputStream();
DataOutputStream commStream = new DataOutputStream(stream);
commStream.write("1234567890123456".getBytes());
socket.close();
Log.d(TAG, "Client socket done");
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
});
clientThread.start();
Он даже не подключается к сокету сервера, а просто ждет тайм-аута. Есть ли что-то, что я делаю неправильно здесь?
Заранее спасибо.