我正在實施一個程序,其中控制器(服務器)定期調用代理(客戶端)並將其發送給IP地址。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();
}
}
在代理(客戶端) - 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();
}
}
而且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();
}
}
當我運行控制器(服務器)時,雖然Controller仍在監聽,但Agent的(客戶端)端只執行一次。另外,如果我重新運行代理,則不會發生任何事情。有人可以幫幫我嗎?
1)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://pscode.org/sscce.html)。 2)請在代碼中使用縮進。縮進有助於可讀性。 –
@安德魯湯普森 - 當然,我會馬上編輯它。 –
良好的編輯呼叫。不幸的是:1)理想情況下,SSCCE應該是單個源文件。 2)這對於服務器/客戶端設置來說很棘手(但並非不可能)。 –