Android WifiDirect套接字编程,错误:拒绝连接/网络不可达

时间:2019-05-01 11:54:39

标签: java android sockets network-programming

我正在构建完全免提的离线语音聊天Android应用。我正在将WiFiDirect和WiFi组合用于网络。该应用程序具有“ GroupOwner”和“ Peer”两种模式,并且在随机超时后会不断在它们之间进行切换。我在groupOwner上使用WifiP2pManager创建一个P2p组,并启动一个服务,该服务在其实例中包含组名称,组密码及其地址。

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并使用WifiManager连接到groupOwner。

...
{
        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();
}
...

然后,在成功连接之后,我启动套接字并尝试连接到serverSocket。

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

即使对等方和groupOwner已连接,但对等套接字也显示“连接被拒绝”或“网络不可达”。

有人可以帮我解决这个问题吗? 如果有人具备在Android中构建网络应用程序的专业知识,我会对付费协作感兴趣。

0 个答案:

没有答案