Android Wifi P2P-使用什么主机/如何获取?

Android Wifi P2P-使用什么主机/如何获取?,android,p2p,Android,P2p,我正在尝试获取一个WiFi点对点的运行示例,其中一个用户可以向另一个用户发送一个简单的字符串。 我已经可以获得可用客户端的列表,但我无法连接到客户端: 02-20 09:59:12.789: E/TTT(4176): Host is unresolved: 5e:f8:a1:36:ee:64 socket.connect((new InetSocketAddress(host, 8888)), 5000); 我想我需要的是IP地址而不是MAC地址,但我怎么才能得到它呢? 还是另一个问题 解决

我正在尝试获取一个WiFi点对点的运行示例,其中一个用户可以向另一个用户发送一个简单的字符串。 我已经可以获得可用客户端的列表,但我无法连接到客户端:

02-20 09:59:12.789: E/TTT(4176): Host is unresolved: 5e:f8:a1:36:ee:64

socket.connect((new InetSocketAddress(host, 8888)), 5000);
我想我需要的是IP地址而不是MAC地址,但我怎么才能得到它呢? 还是另一个问题

解决方案:
我向两个客户端显示他们自己的IP地址,这样你就可以输入IP来连接到另一个客户端的IP——它是这样工作的,尽管这不是一个完美的解决方案。

在一台设备上打开服务器套接字,在另一台设备上使用客户端套接字进行连接,然后在客户端上打开一个套接字,从服务器连接到客户端,然后它们变为equalP2P

您确实需要连接到的设备的IP地址,并且需要将端口设置为在服务器上打开的端口。如果在PC上执行此操作,请确保正确设置防火墙。如果安装了防火墙应用程序,这同样适用于Android。创建服务器套接字时,只需设置端口,也可以在此处添加IP地址,但这些地址仅用于过滤请求

您需要IP地址,因为TCP和UDP协议依赖于internet协议IP才能工作。本文将对此进行详细解释,但您也可以看到任何关于网络堆栈和OSI模型的教程或说明

在服务器端,您可以编写如下内容:

ServerSocket serverSocket = null;
Socket clientSocket = null;
try {
    serverSocket = new ServerSocket(8000);
    clientSocket = serverSocket.accept();

    ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());

    oos.writeObject("WELCOME");
    oos.flush();
} catch (Exception e) {
    e.printStackTrace();
}
不要把这个放在UI线程上,因为你会得到一个异常。相反,创建一个名为Networking的AsyncTask或worker线程,并在那里进行网络工作。此外,当连接时,您可能会使用whileisConnected循环自己创建阻塞方法,以便侦听来自套接字的数据

在客户端,只需使用如下方式连接到此打开的套接字:

Socket socket;
try {
    socket = new Socket("IP.OF.HOST.DEVICE", 8000);
    ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
    ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
    System.out.println("Connected");
    System.out.println("Input: " + input.readObject());
    while (true) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String s = br.readLine();
        output.writeObject(s);
        output.flush();
    }
} catch (Exception e) {
    e.printStackTrace();
}
//Close resources when you don't need them especially sockets.
socket.close();
试试这个

socket = new Socket();
        InetSocketAddress socketAddress = new InetSocketAddress(SERVER_IP, SERVERPORT);
        socket.connect(socketAddress);

您需要IP地址。@BenjaminSchwalb为什么不试试WiFiDirectDemo它的android遗留版本。。。这里展示了如何实现你的目标want@BenjaminSchwalb你找到解决办法了吗?我面临着同样的问题,感谢广泛的回答,但我已经完成了所有的工作-我只需要找到连接设备的IP,但是我得到了,现在你没有回答这个问题,你刚刚给出了他发布的问题的代码。问题是如何以P2P方式在设备之间发送简单字符串,而这正是所需的代码。海报上只说他们有一份可用客户的名单。还是我完全误解了这个问题?如何获取服务器IP?我有一个设备列表,我想向其中一个设备发送一些数据。如何获取所选设备的IP@艾莉亚