我有以下的应用程序,如下所示:
Runtime.getRuntime().exec("java -cp /var/dist/Test.jar System.V PDP-11");它有10到20秒的任务,在端口1965上还包含TCP/UDP服务器。一旦任务完成,我的另一只手会发送一个TCP字节来关闭System.V
Runtime.getRuntime().exec("java -cp /var/dist/Test.jar System.V PDP-11/20");在不到1秒的时间内,另一个操作执行如上,但这失败了,因为端口1965已经在使用中。但它是用System.exit(0)杀死的
我该怎么解决这个问题?这样它就不会说“已经在使用的端口”了?似乎需要很多时间去初始化通过Java监听的TCP或UDP端口。( nc -l端口会被更快地杀死)。
后续行动:
我试着遵循,但仍然要花时间才能获得那个端口(Linux )。
byte[] buf =新byte50;
sock.setSoTimeout(100);
发布于 2012-03-08 21:14:23
操作系统需要一些时间“注意”端口可以再次使用--即使关闭套接字并关闭应用程序也是如此。可以通过以下代码解决问题:
ServerSocket ss = ... //initialization of socket listening on port 1965
ss.setReuseSocket(true);请记住,上面的代码只是对操作系统的提示,应该尽可能快地释放端口。TCP堆栈的一些外来实现可能不会满足这一要求。
https://stackoverflow.com/questions/9624516
复制相似问题