We had a similar problem, it was caused by having a single specific
local-port configured for the data-connection.
fixed it by setting local-port to zero, that is let the server use a
default local port for connecting out.
in ftpd.xml
<data-connection>
<idle-time>10</idle-time>
<active>
<enable>true</enable>
<local-address>10.25.1.8</local-address>
<local-port>0</local-port>
<ip-check>false</ip-check>
</active>
<passive>
<address>10.25.1.8</address>
<ports>0</ports>
</passive>
</data-connection>
the code where you're throwing is
if(localPort == 0) {
dataSoc = new Socket(address, port);
}
else {
InetAddress localAddr =
dataConfig.getActiveLocalAddress();
dataSoc = new Socket(address, port, localAddr,
localPort);
}
by setting a single local-port, you call Socket with a localAddr and
localPort,
so it makes sense that the second call would fail with a bind failure.
hope that helps
[EMAIL PROTECTED] wrote:
Hi ,
I have integrated the FTPServer in my application. FTP server is running
fine in my application. The FTPClient
(org.apache.commons.net.ftp.FTPClient) connects to FTPServer on port
18021. I am able to retrieve a file from the FTPServer. Whenever I try
to retrieve more than one files from the FTPServer. Then I am getting
exception "BindException: Address already in use" .
Could you please tell me How I can resolve this problem? Please let me
know if you have any solutions or suggestion for this. I am looking
forward your response.
I am also sending code snippets:
FTPClient client = new FTPClient();
System.out.println("Connecting FTP Server");
client.connect("10.150.1.111",18021);
//client.connect("10.150.1.111");
System.out.println("FTP Server Connected");
int reply = client.getReplyCode();
System.out.println("[EmbeddedFtpSessionPolicy] FTP connection
reply code is "+reply);
if (FTPReply.isPositiveCompletion(reply)) {
System.out.println("[EmbeddedFtpSessionPolicy] connection
established to "+client.getRemoteAddress().getHostAddress());
boolean success = client.login("admin", "admin");
System.out.println("FTP Server success "+success);
}
File local1 = new File("TEST.log");
File local = new File("ftpd.log");
boolean status;
// if we comment any one of the given bellow it will work
properly ....
status = client.retrieveFile("/sdp/database/ftpd.properties", new
FileOutputStream(local));
status = client.retrieveFile("/sdp/database/TEST.log", new
FileOutputStream(local1));
if (client.isConnected()) {
System.out.println("FTP Server disconnected");
client.logout();
client.disconnect();
client =null;
}
System.out.println("FTP Server disconnected ");
2006-07-12 15:22:12,641 INFO [org.apache.ftpserver.RequestHandler] Open
connection - 10.150.10.133
2006-07-12 15:22:12,650 INFO [org.apache.ftpserver.command.PASS] Login
success - admin
2006-07-12 15:22:12,660 WARN [org.apache.ftpserver.FtpDataConnection]
FtpDataConnection.getDataSocket()
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331)
at java.net.Socket.bind(Socket.java:498)
at java.net.Socket.<init>(Socket.java:307)
at java.net.Socket.<init>(Socket.java:211)
at
org.apache.ftpserver.FtpDataConnection.getDataSocket(FtpDataConnection.java:205)
at
org.apache.ftpserver.FtpRequestImpl.getDataOutputStream(FtpRequestImpl.java:332)
at org.apache.ftpserver.command.RETR.execute(RETR.java:120)
at
org.apache.ftpserver.RequestHandler.service(RequestHandler.java:277)
at
org.apache.ftpserver.RequestHandler.run(RequestHandler.java:242)
at java.lang.Thread.run(Thread.java:534)
Thanks and regards,
Tarkeshwar Prasad
Flextronics Software Systems
[EMAIL PROTECTED]
( Mobile: 9886562675
Office: 080-41067342(x7342)
*********************** FSS-Private ***********************