使用Java的RCP命令工作不正常
我使用RCP和Java将文件从一台服务器复制到另一台服务器。在我的源服务器中,我有10000个文件,每个文件大小为5KB。我正在使用下面的程序复制相同的文件。但在复制了几个文件后,它无法复制其余的文件使用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 =
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当您手动运行命令时,它是否显示任何内容?