有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过socketsReusing端口定期查询客户端以进行更新

使用控制器。java,我正在NetworkDiscovery中实现run()。查询子网中所有机器的java。活动机器以其状态回复。这种情况每隔一段时间就会发生

public class Controller {
NetworkDiscovery n;
public static int discoveryInterval=2000;
PM pmList;
List pmlist=(List) new PM();

public static void main(String[] args) throws UnknownHostException{
Timer t1=new Timer();
t1.scheduleAtFixedRate(new NetworkDiscovery(), 2000, discoveryInterval);
}

public class NetworkDiscovery extends TimerTask{

InetAddress controllerIP;
int controllerPort;

NetworkDiscovery() throws UnknownHostException {
    controllerIP=InetAddress.getLocalHost();
    controllerPort=4455;
}

@Override
public void run() {
    try {
        byte[] recvBuf = new byte[5000];
        DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
        DatagramSocket dSock = new DatagramSocket(4445);
        dSock.receive(packet);
//implementation related code follows
**dSock.close();**
}
}

在客户端,打开一个类似的数据报socket,接收/发送对象

问题是,在控制器方面,我在特定的时间间隔后执行NetworkDiscovery的run(),在第二次执行期间,它会说:

java.net.BindException: Address already in use

既然我正在用close()关闭控制器的socket,为什么它仍然显示这个地址已经在使用中?如何确保在下一次迭代中,控制器重新调用networkDiscovery


共 (1) 个答案

  1. # 1 楼答案

    也许第二个任务在第一个任务完成之前就开始了?您是否尝试插入调试消息并查看第一个任务是否已完成