ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
The socket that is not being created is the one that must connect to port 21 (the FTP data port) on the target server. The FTP control port socket (port 20) apparently DOES get created by commons.net, since it is possible to pass commands and get responses on Windows JVM's (at least on the 3 different PC's I've tested on) but it appears to be impossible to establish a data socket to FTP port 21 on the Java JVM under Windows.
All permission restrictions have already been waived in an attempt to get the code working on Windows by placing an AllPermissions permission in the relevant java.policy file.
The code referred to runs perfectly under Linux...
No firewall running - systems all connect straight through a router. The Linux (working) system and the Windows (non-working) systems all go through this same router...
I'm assuming a bug in the windows JVM ...? I. e. I can do nothing about this?
I have done further testing on this and I have discovered that storeFile attempts to connect to the webserver the applet is running on, NOT the logged in FTP server as is logged in to when that instance of the FTPClient object that is having its storeFile method being called is started to be used.
On all XP machines, this is displayed in the Java console. Lines tagged J are JVM output, lines tagged P is output System.out.prinln'ed by my program:
J1: network: Connecting socket://polard.com:21 with proxy=DIRECT
J2: network: Connecting socket://polard.com:21 with proxy=DIRECT
P1: Connected for initial upload!
P2: Passive mode set
P2: Transferring...
P2: Starting upload now...
*J3: network: Connecting socket://www2a.your-server.co.za:50989 with proxy=DIRECT
Upload failed - storeFile returned false - socket?
The line marked with the asterisk is the error line.
Line J3 should be:
network: Connecting socket://polard.com:20 with proxy=DIRECT
to initate a data port connection (FTP on port 20) with the polard.com server, to start transferring the file. This is NOT what happens - why does it connect to my webserver,
network: Connecting socket://www2a.your-server.co.za:50989 with proxy=DIRECT
instead of polard.com:20? With a random port number? The :50989 changes from run to run.
On the Linux JVM, it looks and works exactly right:
J1: network: Connecting socket://polard.com:21 with proxy=DIRECT
J2: network: Connecting socket://polard.com:21 with proxy=DIRECT
P1: Connected for initial upload!
P2: Passive mode set
P2: Transferring...
P2: Starting upload now...
*J3: network: Connecting socket://polard.com:20 with proxy=DIRECT
So the apparent bug is that on Windows JVMs the commons.net FTP module "forgets" the server it is connected to, trying instead to open a socket to the host the applet is running on, instead of the FTP server connected to and logged in to with the FTPClient object's instances of connect() and login().
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.