我们有我的公司喜欢在一夜之间运行的批处理文件,因此我使用了我们的服务器(MatLab)/客户端(Java / Eclispe)代码,这对单个文件运行良好,对所有内容进行了一段时间的真正循环并使其工作这样就好了。我们唯一的问题是服务器总是通过socket.accept()调用来查找客户端,但如果没有客户端连接到它,它就会永远存在。要关闭程序,我们必须转到任务管理器并强制关闭它。
所以有任何方法我可以把一个计时器接受,所以如果没有人在一段时间后尝试连接,没有更多的批处理文件可以运行,我可以取消连接并关闭程序。
答案 0 :(得分:0)
此代码允许您在accept()
上设置超时private ServerSocket listener;
private int timeout;
private Thread runner;
private boolean canceled;
...
// returns true if cancel signal has been received
public synchronized boolean isCanceled()
{
return canceled;
}
// returns true if this call does the canceling
// or false if it has already been canceled
public synchronized boolean cancel()
{
if ( canceled ) {
// already canceled due to previous caller
return false;
}
canceled = true;
runner.interrupt();
return true;
}
public void run()
{
// to avoid race condition (see below)
listener.setSoTimeout(timeout);
while ( ! isCanceled() ) {
// DANGER!!
try {
Socket client = listener.accept();
// hand client off to worker thread...
}
catch ( SocketTimeoutException e ) {
// ignore and keep looping
}
catch ( InterruptedIOException e ) {
// got signal while waiting for connection request
break;
}
}
try {
listener.close();
}
catch ( IOException e ) {
// ignore; we're done anyway
}
}