私は「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台の電話を接続するための他のソリューションを提供できますか?本当にありがとう。