Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java的RCP命令工作不正常_Java_Unix - Fatal编程技术网

使用Java的RCP命令工作不正常

使用Java的RCP命令工作不正常,java,unix,Java,Unix,我使用RCP和Java将文件从一台服务器复制到另一台服务器。在我的源服务器中,我有10000个文件,每个文件大小为5KB。我正在使用下面的程序复制相同的文件。但在复制了几个文件后,它无法复制其余的文件 package com.rcp.tester; import java.io.IOException; public class CopyFile{ private static int successCounter = 0; private static int failedCounter =

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

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:所有正在使用的端口

我能够解决上述问题

在我的服务器中,仅配置了510个端口。由于我为每个文件调用了单独的RCP命令,所有端口很快就耗尽了,我得到了rcmd:socket:all-ports-in-use-error

下面的链接帮助了我:

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


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

您是否首先从shell手动尝试rcp?该命令是否产生任何输出?您没有对输出执行任何操作。@Juned是的,我已尝试手动使用该命令。它工作得很好。如果文件数量较多,则会出现问题。@immibis不清楚您引用的是什么输出。我正在尝试将文件从一台服务器复制到另一台服务器。我希望目标服务器中的文件数量相同。@Somnath当您手动运行命令时,它是否显示任何内容?