使用Java的RCP命令无法正常工作

时间:2014-08-02 10:55:02

标签: java unix

我正在使用RCP和Java将文件从一台服务器复制到另一台服务器。在我的源服务器中,我有10000个文件(每个文件大小为5 KB)。我正在使用以下程序来复制相同的内容。但是在复制了几个文件之后,它无法复制剩余的文件。

package com.rcp.tester;
import java.io.IOException;

public class CopyFile{
private static int successCounter = 0;
private static int failedCounter = 0;

public static void main(String[] args){
    for(int i=1;i<=10000; i++){
        StringBuffer rcpCommand = new StringBuffer("rcp -pr <some path>");
        rcpCommand.append("Test"+i+".xml");
        rcpCommand.append(" <RemoteUserNAme>@<RemoteIp>:<RemotePath>");
        try{
            executeCommandLineArgument(rcpCommand.toString());
        }
        catch(Exception excep){
            excep.printStackTrace();
        }
    }
}

private static void executeCommandLineArgument(String commandToBeExecuted) throws     Exception{
    Process process = null;
    try{
        process = Runtime.getRuntime().exec(commandToBeExecuted);
    }
    catch (IOException ioException){
        throw new Exception(ioException.getMessage());
    }
    try{
        process.waitFor();
    }
    catch (InterruptedException interruptedExcep){
        throw new Exception(interruptedExcep.getMessage());
    }
    int retVal = process.exitValue();
    if(retVal !=0 ){
        failedCounter++;
        System.err.println(" Failed to execute file numbered: "+failedCounter);
    }
    else{
        successCounter++;
        System.out.println(" Successfully copied file numbered:  "+successCounter);
    }
}

}

一个。我已经尝试了几次但是没有任何理由。可能是什么原因? B.除了使用进程以外,还有其他方法来处理文件吗?

修改

尝试使用以下shell脚本:

i=1
while [ $i -le 10000 ]
do
{
  echo "copying Test{$i}.xml"
  rcp -pr <some path>/Test$i.xml <RemoteUserNAme>@<RemoteIp>:<RemotePath>
  i=`echo $i+1|bc`
}
done

我观察到正在复制 510 文件,之后会出现以下错误消息:

rcmd:socket:正在使用的所有端口

1 个答案:

答案 0 :(得分:0)

我能够解决上述问题。

在我的服务器中,只配置了510个端口。由于我为每个文件调用了单独的RCP命令,所有端口很快就会耗尽,我得到 rcmd:socket:所有正在使用的端口错误。

以下链接帮助了我:

http://h10025.www1.hp.com/ewfrf/wc/document?cc=us&lc=en&docname=c02662351

另一个观察是一分钟后所有510个端口自动释放。因此,在处理时,我让当前线程等待一分钟并复制下一组510个文件,依此类推。

然而,为什么端口在一分钟后自动释放仍然不为我所知。