【发布时间】:2015-07-20 16:13:28
【问题描述】:
我在 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();
}
【问题讨论】:
-
您的意思是您的一台设备是服务器,而另一台设备是客户端?还是有两个客户端和一个服务器?
-
有两个或多个客户端