【问题标题】:In android app i create sockets with ip of cellular network it works but when i use wifi router ip is local like 192.168.23.2在 android 应用程序中,我使用蜂窝网络的 ip 创建套接字它可以工作,但是当我使用 wifi 路由器时,ip 是本地的,如 192.168.23.2
【发布时间】:2018-06-20 20:19:07
【问题描述】:

问题是, 在 android 应用程序中,我使用蜂窝网络提供的 ip 创建套接字,它工作正常,但当我使用 wifi 路由器作为互联网连接时不起作用,然后它的 ip 是本地 ip,类似于 192.168.23.2 然后套接字在其他网络上不起作用

当移动设备中有蜂窝数据网络(如 3g 等)时,服务器向移动应用程序发送通知可以正常工作,但是 当有wifi或手机连接到路由器时,它的IP通常是这样的192.168.12.5,现在如果我从服务器发送通知到这个IP,现在应用程序无法接收通知,我需要获取IP移动设备可从任何地方连接 这是我向 ip 发送数据的方式

var net = require('net'); 
var client = new net.Socket();
client.connect(3001, '192.168.8.101', function() {
   console.log('Connected');
   let data_call = {'type' : 'call' , 'user_ip' : '192.0.0.1', 'user' 
   : 'Pappa'}
   let data_msg = {'type' : 'msg' , 'user_ip' : '192.0.0.1', 'user' : 
   'Pappa', 'text' : 'i am good'}

   client.write(JSON.stringify(data_call));
   console.log('message sent');
   client.destroy(); 

});

【问题讨论】:

  • 即使用户和服务器在不同的互联网连接上也应该可以工作

标签: android sockets networking


【解决方案1】:

那是因为 192.168.x.x 是本地 IP,无法路由到。您需要使用路由器的对外 IP 地址。您还需要在路由器上进行端口转发。

【讨论】:

  • 不,我们不能进行端口转发,因为我们只有安卓 apk 供我们无法配置他们的路由器的用户使用
  • 如果这是一个商业应用程序,是的,这是不可能的。服务器为什么要发起通信?客户端应该访问服务器(使用已知且可访问的 IP 地址)。
  • 否则,你怎么找到你的客户?
  • 就像,当客户端打开我们的应用程序时,我们调用服务器,服务器保存它的 ip,然后在需要时服务器向它发送消息,因为我的应用程序在用户之间直接一对一聊天
  • 我需要的是,在用户之间进行一对一的聊天,不使用任何第三方服务,都应该定制。
猜你喜欢
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多