2016-03-25 10 views
0

2つのアンドロイド携帯電話をソケット経由で接続する際に問題があります。私はアンドロイドのデバッグブリッジを使用して携帯電話をPCに接続し、携帯電話でエミュレータを起動できます。Android Socket Connectioが拒否されました

私はしかし、私は私のクライアント側で次のエラーを取得する1回の電話でサーバーを起動し、他に接続しよう:

W/System.err: java.net.ConnectException: failed to connect to /192.168.49.1 (port 8080): connect failed: ECONNREFUSED 

サーバー

private class SocketServerThread extends Thread { 
    static final int SocketServerPORT = 8080; 

@Override 
public void run() { 
    try { 
     serverSocket = new ServerSocket(SocketServerPORT); 
     Log.d("Quiz", "Server creation connection success"); 
     Log.d("Quiz", "Server local port "+serverSocket.getLocalPort()); 
     Log.d("Quiz", "Server local port "+serverSocket.getInetAddress()); 

     HostingScreen.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
      } 
     }); 

     while (true) { 
      Socket socket = serverSocket.accept(); 
      count++; 
      message += "#" + count + " from " + socket.getInetAddress() 
        + ":" + socket.getPort() + "\n"; 

      HostingScreen.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        msg.setText(message); 
       } 
      }); 

      SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
        socket, count); 
      socketServerReplyThread.run(); 

     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

クライアント

@Override 
protected Object doInBackground(Object[] params) { 
    Socket socket = null; 
    try { 
     socket = new Socket(host,port); 
     Log.d("Quiz", "Client socket success"); 
     connected = true; 
     while (connected) { 
      try { 
       Log.d("Quiz", "Sending command"); 
       PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket 
         .getOutputStream())), true); 
       // where you issue the commands 
      } catch (Exception e) { 
      } 
     } 
     socket.close(); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }finally{ 
     if(socket != null){ 
      try { 
       socket.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return null; 
} 

ポートは、当面はサーバとクライアントの両方でポート8080にハードコードされています。ホスト私は次のコードを使用して電話機間の接続を行う際にアドレスが発見された:

接続

 private void onConnectionChanged(Intent intent) { 
     final NetworkInfo netInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO); 
     final WifiP2pInfo p2pInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO); 
     isConnected = netInfo.isConnected(); 
     if (isConnected) { 
      //Get host connection info 
      wifiMgr.requestConnectionInfo(channel, new ConnectionInfoListener() { 

       @Override 
       public void onConnectionInfoAvailable(final WifiP2pInfo info) { 
        wifiMgr.requestGroupInfo(channel, new GroupInfoListener() { 
         @Override 
         public void onGroupInfoAvailable(WifiP2pGroup group) { 
          if (group == null) 
           return; 
          WiFiP2P.this.group = group; 
          Log.d(TAG, "Wifi p2p connection group is " + group.getNetworkName()); 
          Log.d(TAG, "Group size " + group.getClientList().size()); 
          fireOnConnectionSucceed(group.getNetworkName(), group.getPassphrase()); 
          //create client if not host 
          if(info.isGroupOwner) { 
           Client client = new Client(8080, p2pInfo.groupOwnerAddress.getHostAddress()); 
           client.execute(); 
           Log.d(TAG, "Client launch success"); 
           Log.d(TAG, "Host address " + p2pInfo.groupOwnerAddress.getHostAddress()); 
          } 
         } 
        }); 
        if (isConnected && !info.isGroupOwner) { 
        } else { 
         startDiscovery(); 
        } 
       } 
      }); 

     } else { 
      group = null; 
      fireOnConnectionLost(); 
     } 
    } 

私はクライアントの通過を起動していない場合、私は、接続されている人がホストであるかどうかを確認します接続するソケットが作成されるAysncタスクであるクライアントへのポートとホストアドレス。

socket = new Socket(host,port); 

は、エラーが記載原因使用する場合

エラーがクライアントで発生します。

問題の原因は何ですか?彼らは両方のWiFiを介してお互いに接続するが、私はサーバーソケットに接続しようとすると失敗します。

ありがとうございます。

編集: somethingsを消去するには、私はadbを使用して、私のアプリを起動することができます私の電話に私のコンピュータからアプリを取得します。

私はwifimanagerを使用して両方の電話機を接続しています。私はwifiグループを作成した電話機を見つける必要があります。そして、その人物が接続するソケットを起動しようとすると、接続情報からホストアドレスを使用してホストに送信します。

+0

「電話機でエミュレータを起動する」。 ??????? – greenapps

+0

'接続している人がホストであるかどうかを確認します。 '申し訳ありませんが、私はあなたが何をしているのか分かりません。 – greenapps

+0

'私はPCに電話を接続するためにアンドロイドデバッグブリッジを使用しています。 '私はあなたのPCにそれらを接続する理由はありません。 – greenapps

答えて

0

私は自分の問題を解決することができました。それは、サーバーをホストしていたデバイスがグループ所有者に指定されていないことが判明しました。

config.groupOwnerIntent=0; 

デバイスを接続する所有者の意図を0に設定すると、問題が解決されました。

関連する問題