2016-06-30 2 views
0

글쎄, 나는 ShareIt과 같은 소프트웨어를 만들려고 노력하고있다. 그러나 나는 그 사이에 맞았다. 지금까지 무엇을 했는가? 나는 서버가 클라이언트에게 어떤 종류의 파일을 보낼 수있는 프로그램 (서버와 클라이언트 측)을 만들었으며 클라이언트는 서버의 IP 주소를 가져야한다. 하지만 알고 싶습니다 .- 클라이언트가 수신중인 서버의 IP 주소를 자동으로 검색하는 방법은 무엇입니까? 매번 수동으로 IP 주소를 입력하지 않고 대신 클라이언트가 사용 가능한 서버의 모든 IP 주소를 자동으로 감지하고 수신하는 방법을 알고 싶습니다. 미리 감사드립니다. ShareIt은 PC에서 어떻게 작동합니까?

+0

UDP 브로드 캐스트를 사용하고 데이터 그램에서 IP 주소를 알아낼 수 있습니다. – aksappy

답변

1

클라이언트가 생성 된 액세스 포인트에 연결되면 아래와 같이 액세스 포인트 IP 주소를 얻을 수 있습니다. 액세스 포인트를 만들어 누구든지

public static String getAccessPointIpAddress(Context context) { 
    WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE); 
    DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); 
    byte[] ipAddress = convert2Bytes(dhcpInfo.serverAddress); 
    try { 
     String ip = InetAddress.getByAddress(ipAddress).getHostAddress(); 
     return ip.replace("/", ""); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

private static byte[] convert2Bytes(int hostAddress) { 
    byte[] addressBytes = {(byte) (0xff & hostAddress), 
      (byte) (0xff & (hostAddress >> 8)), 
      (byte) (0xff & (hostAddress >> 16)), 
      (byte) (0xff & (hostAddress >> 24))}; 
    return addressBytes; 
} 

발신자/수신자는 호스트 이름으로 IP 주소에서 ServerSocket의를 시작합니다. 그러나 클라이언트는 포트 번호가 필요합니다. 양쪽에 하드 코드를하거나 SSID를 인코딩하여 포트 번호를 임베드 할 수 있습니다.

또한 나는 파일이 & 전송을 공유하거나 다른 말로이 SHAREit 어떻게 작동하는지 시뮬레이션에 도움이 SHAREthem라는 라이브러리를 작성하는 시도를했습니다. 또한 this 블로그에서 구현 세부 사항을 설명합니다 희망이 있습니다.