J'implémente un programme dans lequel le contrôleur (serveur) appelle périodiquement l'agent (client) et lui envoie l'adresse IP.Programme client client en Java
Controller.java
public class Controller {
static int discoveryInterval;
NetworkDiscovery n1;
Controller(){
discoveryInterval=6000;
}
public static void main(String[] args) throws IOException {
Timer t1=new Timer();
t1.schedule(new NetworkDiscovery(), discoveryInterval);
}
}
NetworkDiscovery.java-
import java.io.*;
public class NetworkDiscovery extends TimerTask {
protected DatagramSocket socket = null;
protected BufferedReader in = null;
public NetworkDiscovery() throws IOException {
this("NetworkDiscovery");
}
public NetworkDiscovery(String name) throws IOException {
super(name);
socket = new DatagramSocket(4445);
}
public void run() {
try {
byte[] buf = new byte[256];
// receive request
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// figure out response
String dString = InetAddress.getLocalHost().toString();
buf = dString.getBytes();
// send the response to the client at "address" and "port"
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
socket.close();
}
}
l'agent (côté du client) - Agent.java
public class Agent {
ackDiscovery ackDisc=new ackDiscovery();
public static void main(String[] args) throws SocketException,UnknownHostException,IOException {
ackDiscovery ackDisc=new ackDiscovery();
ackDisc.ackInfo();
}
}
Et ackDiscovery.java-
public class ackDiscovery {
int agentListenPort;
void ackDiscovery(){
agentListenPort=4455;
}
public void ackInfo() throws SocketException, UnknownHostException, IOException{
// get a datagram socket
DatagramSocket socket = new DatagramSocket();
// send request
byte[] buf = new byte[256];
InetAddress address = InetAddress.getByName(MY_IP);
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
socket.send(packet);
// get response
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// display response
String received = new String(packet.getData());
System.out.println("Data received:"+ received);
socket.close();
}
}
Lorsque j'exécute le contrôleur (serveur), le côté de l'agent (client) n'est exécuté qu'une seule fois si le contrôleur est toujours en écoute. De plus, si je relance l'agent, rien ne se passe. Quelqu'un peut-il m'aider s'il vous plaît?
1) Pour une meilleure aide plus rapidement, postez un [SSCCE] (http://pscode.org/sscce.html). 2) Veuillez utiliser l'indentation dans le code. L'indentation aide à la lisibilité. –
@Andrew Thompson- Bien sûr, je vais le modifier tout de suite. –
Bon appel sur l'édition. Malheureusement: 1) Un SSCCE devrait idéalement être un fichier source unique. 2) C'est compliqué à faire avec une configuration serveur/client (mais pas impossible). –