2013-10-05 3 views
5

범위의 모든 동료를 검색하는 Android에서 애플리케이션을 개발 중입니다. 이후 검색을 시작한 기기가 그룹 소유자가되고 다른 모든 기기가 클라이언트, 나는 모든 연결 일을했지만 지금은 그룹 소유자에게 모든 연결 피어에게 메시지를 보내길 원합니다. 어떻게 이것을 달성 할 수 있고 또한 피어 - 투 - 피어 통신에서 방법론이 무엇인지 말해주십시오, P2P 안드로이드에서도 IP를 사용하여 데이터를 보내고받습니다.Android Wi-Fi Direct Network

감사합니다. 감사합니다.

+0

성공적인 결과를 얻었습니까? 그렇다면 알려주십시오. 동일한 문제에 직면하고 있으며 해결 방법을 찾을 수 없습니다. 가능한 모든 문서를 드릴 다운했지만 성공하지 못했습니다. (:( –

답변

10

Wi-Fi Direct/P2P는 일반 Wi-Fi로 간주 할 수 있지만 그룹 소유자 (GO)는 소프트웨어 액세스 지점 (DHCP 서버, 프로비저닝 등) 역할을합니다. 그래서 마지막 질문에 답하기 위해 예 Wi-Fi Direct는 IP를 사용하여 데이터를 보내고받습니다.

그룹의 모든 구성원에게 데이터를 보내시겠습니까? 이에 대한 솔루션은 두 가지가 있습니다.

  1. 멀티 캐스트를 사용하여 메시지를 한 번 브로드 캐스트합니다.
  2. 그룹의 개별 고객에게 메시지를 보냅니다.

가장 효율적인 방법은 데이터를 한 번만 보내면되므로 멀티 캐스트를 사용하여 데이터를 브로드 캐스트하는 해결책 1입니다. 안타깝게도 Wi-Fi 멀티 캐스트 지원은 많은 기기가 비 유니 캐스트 트래픽을 차단하는 것처럼 보이므로 안드로이드에서 매우 분열되어 있습니다. 이 경로를 따라 가려면 자세한 내용은 this article을 참조하십시오.

모든 장치에 대한 지원을 보장하고 소량의 데이터 만 전송하려는 경우 솔루션 2가 가장 좋습니다. GO는 그룹의 클라이언트의 IP 주소가 필요하지만 Android에서 Wi-Fi Direct가 구현되는 방식 때문에 GO IP 만 모든 장치에 알려져 있습니다. 하나 개의 솔루션은 클라이언트가 이동 소켓에 연결 자신의 IP 주소를 얻을 수 있도록하는 것입니다 :

클라이언트 코드

private static final int SERVER_PORT = 1030; 

... // on group join: 
wifiP2pManager.requestConnectionInfo(channel, new ConnectionInfoListener() { 
    @Override 
    public void onConnectionInfoAvailable(WifiP2pInfo p2pInfo) { 
     if (!p2pInfo.isGroupOwner) { 
      // Joined group as client - connect to GO 
      Socket socket = new Socket(); 
      socket.connect(new InetSocketAddress(p2pInfo.groupOwnerAddress, SERVER_PORT)); 
     } 
    } 
}); 

그룹 소유자 코드 :

private static final int SERVER_PORT = 1030; 
private ArrayList<InetAddress> clients = new ArrayList<InetAddress>(); 

public void startServer() { 
    clients.clear(); 
    ServerSocket serverSocket = new ServerSocket(SERVER_PORT); 

    // Collect client ip's 
    while(true) { 
     Socket clientSocket = serverSocket.accept(); 
     clients.add(clientSocket.getInetAddress()); 
     clientSocket.close(); 
    } 
} 

이제 모든 작업을 수행해야 각 클라이언트에서 serversocket을 시작하고 클라이언트 목록을 반복하여 각각에 대한 소켓 연결을 만들고 브로드 캐스트하려는 메시지를 보냅니다.

+0

아이디어가 좋지만 구현이 제 경우에는 작동하지 않습니다.) 그룹 소유자로부터 클라이언트에게 메시지를 보낼 수 없습니다. @nikki ashton을 (를) 도와 줄 수 있습니까? –

관련 문제