2012-11-10 62 views
0

我想制作一个基于android的信使,我正在设计这样一种方式,即两个互相聊天的te用户都是服务器和客户端。访问不同网络中具有一个基于公共IP的路由器并且设备具有本地IP地址的设备存在问题。我可以将消息发送到公共IP设备,但我无法使用公共接口路由器访问本地网络内的设备。 说 发件人IP:130.190.93.68 路由器的IP是:130.190.09.54 路由器专网内reciever的IP:192.168.15.186如何从互联网上访问本地IP设备

发送者希望与接收器通信。我如何使用套接字编程来实现它。

编辑代码从评论:

public class SocketClient extends Activity { 
    private Socket socket; 
    private String serverIpAddress = "192.168.15.186"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     bt = (Button) findViewById(R.id.myButton); 
     tv = (TextView) findViewById(R.id.myTextView); 

     InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
     socket = new Socket(serverAddr, 5000); 

回答

0

一种解决方案是有当用户想与另外一个人聊天,用户必须登录到,和中央服务器,如果客户之一在私人网络上,另一个则不在私人网络上的客户端获取公共网络上客户端的地址并启动聊天会话。

如果均为客户端位于专用网络上,则必须通过服务器。如果没有客户端在专用网络上,则服务器随机决定哪个客户端应该是发起连接的客户端。

+0

感谢Joachim,但问题是,当我使用代码“new ServerSocket(ipAddress,port)”创建ServerSocket时,我需要给出IP地址以及如何获取本地网络中接收器的IP地址。你能告诉我,即使接收者在私人网络中,Skype联系人如何知道对方的IP。 – learner

+0

@learner不是一个特定的地址,而是总是有一个通配符地址,这使得服务器套接字在所有接口(以及所有地址)上侦听。据我所知,Skype使用的中央目录服务器非常像我在我的回答中描述的服务器。 –

+0

我正在粘贴我的客户端访问服务器的代码。你可以指导我修改它以访问wildcarda地址 – learner

相关问题