我有一个客户端/服务器连接通过tcp套接字连接到同一个无线网络,使用一个IP地址和端口,但如果两个IP地址设备由于DHCP改变?我怎么能发现其他设备?发现另一个设备与TCP套接字Android
我想如果只有一个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();
}
你的意思是你的其中一台设备是一台服务器,第二台设备是客户端?或者有两个客户端和一个服务器? – eleven
有两个或更多的客户 –