我正在使用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:正在使用的所有端口
答案 0 :(得分:0)
我能够解决上述问题。
在我的服务器中,只配置了510个端口。由于我为每个文件调用了单独的RCP命令,所有端口很快就会耗尽,我得到 rcmd:socket:所有正在使用的端口错误。
以下链接帮助了我:
http://h10025.www1.hp.com/ewfrf/wc/document?cc=us&lc=en&docname=c02662351
另一个观察是一分钟后所有510个端口自动释放。因此,在处理时,我让当前线程等待一分钟并复制下一组510个文件,依此类推。
然而,为什么端口在一分钟后自动释放仍然不为我所知。