Программирование сокета Android WifiDirect, ошибка: соединение отказано / сеть недоступна - PullRequest
0 голосов
/ 01 мая 2019

Я создаю приложение для Android для автономного голосового чата без помощи рук.Я использую комбинацию WiFiDirect и WiFi для сети.Приложение имеет два режима «GroupOwner» и «Peer», и оно постоянно переключается между ними после случайного тайм-аута.Я создаю P2p-группу с помощью WifiP2pManager на groupOwner и запускаю службу, которая содержит имя группы, групповую фразу-пароль и ее адрес в своем экземпляре.

String instance = "IN:"+group.getNetworkName() + ":" + group.getPassphrase() + ":" + mInetAddress.getHostAddress();
Map<String, String> record = new HashMap<>();
record.put("available", "visible");
WifiP2pDnsSdServiceInfo service = WifiP2pDnsSdServiceInfo.newInstance(instance, WifiP2pHelper.SERVICE_TYPE, record);

Сторона GroupOwner Я также запускаю ServerSocket на конкретном порту в потоке

{
...
 serverSocket = new ServerSocket();
 serverSocket.setReuseAddress(true);
 serverSocket.bind(new InetSocketAddress(groupOwnerAddress, serverPort));
...
..
}
..
 @Override
 public void run() {
      while (true) {
         try {
           Socket s = serverSocket.accept();
...
...
}
..


На стороне партнера я использую p2pManager для обнаружения службы и получения данных экземпляра.Затем, используя имя и фразу-пароль, я создаю wifiConfig и подключаюсь к groupOwner с помощью WifiManager.

...
{
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = String.format("\"%s\"", ssid);
        wifiConfig.preSharedKey = String.format("\"%s\"", password);

        netId = wifiManager.addNetwork(wifiConfig);
        wifiManager.disconnect();
        wifiManager.enableNetwork(netId, true);
        wifiManager.reconnect();
}
...

Затем после успешного подключения я запускаю сокет и пытаюсь подключиться к серверу сокет.

...
{
socket = new Socket();
try {
  socket.setReuseAddress(true);
  socket.bind(new InetSocketAddress(ownerPort));
  socket.connect(new InetSocketAddress(inetAddress.getHostAddress(), ownerPort), 5000);
...
}
...

Даже если одноранговый узел и groupOwner подключены, но одноранговый сокет сообщает «Отказано в соединении» или «Сеть недоступна».

Может кто-нибудь помочь мне решить эту проблему?Если у кого-то есть опыт в создании сетевого приложения на Android, я заинтересован в платном сотрудничестве.

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