3

私は「A」と呼ばれるAndroid携帯でソケットサーバーを開発しています。「B」と呼ばれる別のAndroidフォンにソケットクライアントをデプロイします。

電話Actソケットサーバー。電話Bはソケットクライアントを動作させます。PCサーバーCはソケットサーバーとして機能し、IP情報を含む電話「A」要求を受信します。「A」のIPを電話「B」に送信します。

これで、ローカルエリアネットワークで「B」を「A」に接続できました。また、3Gネットワ​​ークで「B」を「A」に接続したい。

まず、Socket Server Cを起動し、電話Aと電話Bを聞きます。

次に、電話Bを起動し、サーバーCに接続します。これにより、サーバーCは、接続されたソケットを介して電話Bと相互に通信できます。

3番目に、電話Aを起動し、サーバーCに接続します。これにより、サーバーCは、接続されたソケットを介して電話Aと相互に通信できます。

1番目と2番目ですが、電話Bは電話Aと相互に通信できます。

ただし、電話Bと電話Aの間の転送を高速化し、サーバーCへの圧力を減らしたい。PCサーバーCを使用して電話AのIPを電話Bに送信します。次に、電話Bを電話Aに接続します。サーバーCから受信しました。

ipをフェッチします:wifiネットワークの場合:

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
int ipAddress = wifiInfo.getIpAddress();
String ip = (ipAddress & 0xFF)+ "." + ((ipAddress >> 8 ) & 0xFF)+ "." + ((ipAddress >> 16 ) & 0xFF) +"."+((ipAddress >> 24 ) & 0xFF);
Log.d(TAG, " wifi net , ip: "+ip);
return ip;

3Gネットワ​​ークの場合:

for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
  NetworkInterface intf = en.nextElement();
  for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
      InetAddress inetAddress = enumIpAddr.nextElement();
      if (!inetAddress.isLoopbackAddress()) {
          String ip = inetAddress.getHostAddress().toString();
          Log.d(TAG, " mobile net , ip: "+ip);
          return ip;
      }
  }
}

しかし、ネットワークでは成功し、3Gネットワ​​ークでは失敗します。

ネットワークの仕組みについては何かあるのではないでしょうか。可能な限り説明し、3Gネットワ​​ークで2台の電話を接続するための他のソリューションを提供できますか?本当にありがとう。

4

0 に答える 0