如何在Android中获取服务器(套接字)的IP地址?

时间:2014-02-06 13:23:56

标签: android sockets android-wifi wifimanager

我正在创建一个连接两个Android设备的简单聊天程序,他们可以发送简单的消息 我在端口上运行带有Socket的服务器(例如1234)

问题是来自客户端我不知道服务器IP地址。 (我不想手动输入) 有没有办法找到在特定端口上运行的服务器?或者我可以在某些特定的静态IP上运行服务器,我可以将其提供给客户端吗?

如果没有另外的方式与在Android 2.2+上运行的Android设备进行通信(不想直接使用wifi)?

先谢谢

6 个答案:

答案 0 :(得分:1)

您可以从服务器广播udp消息,在消息中指定您的IP。让客户端接收广播并使用该消息作为IP地址连接到套接字。 (PS:广播接收机必须允许接收广播)。你完成了!

答案 1 :(得分:0)

主要分配一个SERVER,以便从所有客户端获取IP ADDRESS,PORT编号等详细信息。 激活每个客户端将首先联系SERVER进行自我注册,并获取其他设备进行通信的详细信息(IP ADDRESS等)。 现在他们可以开始等待特定的设备了。

答案 2 :(得分:0)

在4.1上,您可以通过NsdManager使用Mutlicast DNS进行服务发现(如果您在同一网络上)。如果您需要在Internet / 3G上工作,那么实际上没有好办法。您可以使用Google Cloud Messaging(GCM)向客户通知服务器地址,但无论如何,您需要一个稳定地址上的“真实”服务器,所有参与者都可以访问。

http://developer.android.com/reference/android/net/nsd/NsdManager.html

答案 3 :(得分:0)

InetAddress.getLocalHost();对我来说不起作用,但是下面的代码对我来说是

DhcpInfo dhcp = mWifiManager.getDhcpInfo();
int dhc = dhcp.serverAddress;

String dhcS = ( dhc & 0xFF)+ "."+((dhc >> 8 ) & 0xFF)+"."+((dhc >> 16 ) & 0xFF)+"."+((dhc >> 24 ) & 0xFF);

dhcS包含服务器的IP地址,我用于多个设备之间的无线连接。

答案 4 :(得分:0)

您可以使用此代码

 connectionSocket.getRemoteSocketAddress();

答案 5 :(得分:-1)

永远无法使用IP修复端口。它始终由用户提供。要自动知道服务器的IP地址,您可以运行与聊天程序关联的程序。

public class Net {
  public Net() throws UnknownHostException {
    InetAddress ia = InetAddress.getLocalHost();
    System.out.println(ia);
    ia = InetAddress.getByName("local host");
    System.out.println(ia);
  }

  public static void main(String args[]) throws UnknownHostException {
    Net a = new Net();
  }
}

您可以通过与聊天程序相关联的按钮来运行此程序。