Я создаю приложение для 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, я заинтересован в платном сотрудничестве.