gpt4 book ai didi

java - 使用 TCP Socket Android 发现另一台设备

转载 作者:可可西里 更新时间:2023-11-01 02:33:46 26 4
gpt4 key购买 nike

我在连接到同一个无线网络的 2 个 android 设备中通过 tcp 套接字建立客户端/服务器连接,使用一个 ip 地址和一个端口,但是如果两个设备的 ip 地址因为 dhcp 而改变怎么办?我怎样才能发现其他设备?

我想如果只有一个 ip 更改我可以告诉另一个设备“这是我的新 ip”,但如果两个更改都不起作用,我正在考虑从 192.168.1.1 到 192.168 开始循环。 1.255 并使用新 ip 发送消息,我不知道是否有更好的方法来执行此操作,或者循环的开始和结束是哪个?

//SERVER
private void server() {
ServerSocket serverSocket;
Socket socket;
try {
serverSocket = new ServerSocket();
serverSocket.setReuseAddress(true);
serverSocket.bind(new InetSocketAddress(2222));

while (true) {
try {
socket = serverSocket.accept();
Runnable connection = new ConnectionHandler(socket);
new Thread(connection).start();

} catch (EOFException e) {

} catch (Exception e) {

}
}

} catch (IOException e) {

} catch (Exception e) {

}

}
public class ConnectionHandler implements Runnable {
private Socket socket;
public ConnectionHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
final String message = (String)input.readObject();
runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println("Message: " + message);
//Operate with message
}
});
input.close();
socket.close();
} catch (IOException e) {
} catch (ClassNotFoundException e) {
}
}
}

// CLIENT
public static synchronized void client(final String message, final String server_ip) {
new Thread() {
public void run() {
Socket socket;
try {
ObjectOutputStream outputStream;
SocketAddress socketAddress = new InetSocketAddress(InetAddress.getByName(server_ip), 2222);

socket = new Socket();
socket.setReuseAddress(true);
socket.setKeepAlive(true);
socket.connect(socketAddress, 250);

outputStream = new ObjectOutputStream(socket.getOutputStream());
outputStream.flush();

outputStream.writeObject(message);
outputStream.flush();

outputStream.close();
socket.close();
} catch (UnknownHostException e1) {

} catch (IOException e1) {

}
}
}.start();
}

最佳答案

因为您正在为 Android 开发。您可以利用 android 的 WiFi 直接实现,它已经包括对等点发现。

一旦发现对等点,您就可以初始化连接并做任何您想做的事情,例如发送一些数据。这部分与您现有代码所做的类似。

阅读此处的文档。 http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html

关于java - 使用 TCP Socket Android 发现另一台设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com