gpt4 book ai didi

java - 通过套接字定期查询客户端更新 - 重用端口

转载 作者:行者123 更新时间:2023-12-01 15:43:18 24 4
gpt4 key购买 nike

使用 Controller.java,我在 NetworkDiscovery.java 中实现 run(),它查询子网中的所有计算机。 Activity 机器回复其状态。这种情况定期发生。

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();**
}
}

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

问题是,在 COntroller 方面,我在特定时间间隔后执行 NetworkDiscovery 的 run(),并且在第二次执行期间它显示 -

java.net.BindException: Address already in use

既然我通过 close() 关闭了 Controller 的套接字,为什么它仍然显示该地址已被使用?我如何确保在下一次迭代期间, Controller 从网络发现的新调用开始?

最佳答案

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

关于java - 通过套接字定期查询客户端更新 - 重用端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com