2016-06-30 10 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を開始します。しかし、クライアントはPORT番号を必要とします。両側をハードコードするかSSIDをエンコードしてポート番号を埋め込むことができます。

はまた、私はそれがSHAREitがどのように動作するかをシミュレートし&転送または他の言葉でファイル共有を支援するためにSHAREthemと呼ばれるライブラリを書き込むための試みを行いました。またthisブログは実装の詳細を説明します 希望に役立ちます。

関連する問題