FTP response 421 received. Server closed connection - java

I am writing a JAVA code to traverse FTP Location using Apache Commons Net FTPClient and getting output in an Excel file. the code execute correctly for approx 5 min but then gives an IOException:
org.apache.commons.net.ftp.FTPConnectionClosedException: FTP response 421 received. Server closed connection.
I am using commons-net-3.0.1.jar. I have done some R&D and tried:
setDefaultTimeout(6000);
setConnectTimeout(3000);
setSoTimeout(3000);
enterLocalPassiveMode();
and sending NOOP, but still getting the same error.
All I am trying to do is traverse through a directory and if file is found than get file name and file update date in excel else if directory is found then get inside and do until file is found again.
Please help and ask if any other information is required. I am new to JAVA.

See here:
http://kb.globalscape.com/KnowledgebaseArticle10142.aspx
Error 421 Service not available, closing control connection.
Error 421 User limit reached
Error 421 You are not authorized to make the connection
Error 421 Max connections reached
Error 421 Max connections exceeded
Maybe you're not reusing a connection but using a new connection for every request, flooding the server with connections until it hits the connection limit.
Try closing your connections or resuing them.

For future reference..
If the solution by #fiffy didn't work, maybe try turning on the TLS (FTPS/Secure Connection), My server was set to only accept FTPS protocol, so it was rejecting my unencrypted connection, so turning on the TLS (FTPS) helped me solve the prob.
Note:- This error FTP response 421 received is very prominent in Netbeans since its also built in java.

Related

Problems with org.apache.commons.net.ftp.FTPClient, getting FTP response 421 received error

I have some Issue using org.apache.commons.net.ftp.FTPClient.
Here is my code:
if (!FTPReply.isPositiveCompletion(reply)) {
logger.debug("Fehler beim FTP verbindungsaufbau " + reply);
}
FileInputStream fis = new FileInputStream(ziel);
logger.info("....uploading...");
ftpClient.storeFile(cntKen + dateiEndung, fis);
fis.close();
logger.info("....Done!");
The connection to the FTP-Server is ok, but when I try to upload a file to this FTP-Server I receive a FTP response 421 received error message.
With the ftpClient.storeFile(cntKen + dateiEndung, fis) line.
The same code is working with others FTP-Servers, so I am not sure, it is a problem with the code or with some configuration of the ftp server itself.
Any ideas?
Edit: While i read for more informations. The error seams to occour when the server allows only 1 connection at the same time.
Maybe the lib make more than 1 connection?
The Solution is pretty simple. The error means, the ftp server disconneted you since the connect for some reason. So the connection to the ftp server worked, but until the upload of the file, the connection was lost. In this case here, because between the connection and the upload was a ilde time of 5 minutes. The FTP Server was configured to disconnect idle connections after 2 minutes. The disconnection could have some other reasons if you occour the same problem. But in fact the ftp connection was lost, and using .storeFile (or the ftp) is not responding no connection, but a 421 error code
Two ways for solution:
1. prevered: Optimize the software. Check if the ftp connections works, then close the connection. Open it again just in front of the upload.
2. Change FTP-Settings to disconnect idle connections to a higher value

Getting error "javax.net.ssl.SSLException: 530 Please login with USER and PASS" while performing ftp

I am getting the below given error while performing ftp from ubuntu machine to same machine. I have done the complete setup and able to transfer file using Filezilla. But while doing the same from code it is giving error. Below I have shown the code snippet.
String PROTOCOL= "SSL"; //I Have tried with TLS also
FTPSClient ftpsClient = new FTPSClient(PROTOCOL, false);
ftpsClient.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
ftpsClient.connect("192.168.13.5",21);
ftpsClient.login(userName, password);
I am getting the error 530 Please login with USER and PASS. While connecting only. It is not even going to login statement.
Can somebody please point me out what I am doing wrong here?
I am getting the error 530 Please login with USER and PASS. While connecting only. It is not even going to login statement.
If it is not even going to the login statement the message might be caused by the server rejecting the AUTH TLS command which is used to upgrade the connection to SSL/TLS. This might indicate that the server does not support TLS at all.
... able to transfer file using Filezilla.
Are you sure that Filezilla did use FTP with TLS and not plain FTP or SFTP (which is file transfer using SSH, something completely different to FTPS)?
I'm not quite sure, but when you're saying you're using the server and the Client on one machine, you have to use localhost 127.0.0.1 as IP Adress

HTTP transport error: java.net.SocketException: Connection reset

A client application has been built using Jdeveloper 10.1.3.2 and it is running on OC4J server. This application is sending data to external server application. It is working for quite long time without any issue. Lately a connection issue occurred and the following stack trace is generated:
com.sun.xml.ws.client.ClientTransportException: HTTP transport error: java.net.SocketException: Connection reset
at com.sun.xml.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:133)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:153)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:93)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at com.sun.xml.ws.client.Stub.process(Stub.java:319)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:157)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:140)
at $Proxy44.sendRem(Unknown Source)
After goggling I found out a good discussion about the error sockets - What's causing my java.net.SocketException: Connection reset? .One answer in this link says that the issue mostly from the client side because if it is from the server side the exception will be (SocketException reset by peer).
What I did:
I tried out to increase the socket time out for the OC4J with the help of this form How to change OC4J HTTP Timeout. What I did is I changed the propriety oracle.j2ee.http.socket.timeout to be 5000 instead of 500 (10 times longer)
But the error still there. So, any suggestion to over come this issue?
Note: I able to use telnet command for external server IP and Port and it is working fine.
-------------------------------------------------------- Update 1 --------------------------------------------------------
I increase the server clock skew where the client application is running using the following command on server start up:
-Dweblogic.wsee.security.clock.skew=72000000
-Dweblogic.wsee.security.delay.max=72000000
But no luck, problem is not resolved.
-------------------------------------------------------- Update 2 --------------------------------------------------------
I realized that the problem is not from application at all; I test the external URL using SoapUI and I got the same error Connection rest. I think this new update clreay shows that there is nothing wrong with program code. But I need to know where to go or check now. Where is the starting point now to overcome the issue. Any clue will be helpful.
As you can see from Update 2 in the question, the problem was not from the client application because same error occurred from SoapUI.
The problem was that the machine where the client application was running have low bandwidth which was not enough for APIs communication. Using simple speed test , I found out that the upload bandwidth was low comparing to minimum requirements given by server application team.
I concluded this fact by monitoring the network resource using Resource Monitor in Windows while the client application was running and by using online speed check
To solve the issue, the machine bandwidth has to be increased where the client application is running.

Large messages failing in SoapUI - "Error getting response; java.net.SocketException: Connection reset"

I'm using Soap UI 4.6.0 to hit a WCF web service, and when I have really large message payloads, I'm seeing the following error:
Error getting response; java.net.SocketException: Connection reset
The WCF service has around 10 methods, each with progressively larger inputs (eg, 10 int properties, 50 int properties, 100 int properties, etc). This works with the smaller messages, but as they get around 2000-3000 int properties, the error occurs.
The call appears to succeed on the server side, and with this coming from java, I'm assuming I'm butting up against some size limitation/configuration in the client. Is this something I can tweak within Soap UI, the java runtime, or elsewhere?
For me the trick that worked was adding below entry in SoapUI-5.2.0.vmoptions file (it can be found in the bin directory of installa
-Dsoapui.https.protocols=SSLv3,TLSv1.2
Normally a connection reset means that one of the underlying servers timed out waiting for data from another server/application and it reset the connection.
You should try out the suggestions #kroonwijk gave it'll tell you which server is causing the reset and what is causing the server to reset the connection.
Also see What's causing my java.net.SocketException: Connection reset?
If above solutions won't work for you then try this:
Close SoapUI
Go to SoapUi directory for example: C:\Program Files\SmartBear\SoapUI-5.3.0\
Rename directory "jre" to "jre.ignore"
Done. Open SoapUi and it should work now.

How to properly set JavaMail timeout setting

I am using JavaMail to connect to a POP3 server.
Further, I set the following properties, so that JavaMail won't wait to long if an email server doesn't respond:
props.setProperty("mail.pop3.connectionpooltimeout", "3000");
props.setProperty("mail.pop3.connectiontimeout", "3000");
props.setProperty("mail.pop3.timeout", "3000");
However, in some cases the timeout works properly but sometimes JavaMail freezes for minutes(!) with the following debug message:
DEBUG POP3: connecting to host "pop3.yahoo.com", port 110, isSSL false
Changing ports or protocols (SSL, TLS..) has no effect. I assume that the host simply doesn't exist.
For example, if I poll pop3.yahoo.com instead of pop.mail.yahoo.com (which would be the right host name), I have to wait very long til a timeout exception occurs.
After several minutes, I get the following exception and the application continues to run:
java.net.ConnectException: Operation timed out
pop3.yahoo.com seems to exist but won't respond:
localhost:~ me$ ping pop3.yahoo.com
PING pop3.yahoo.com (206.190.46.10): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
^C
You might be asking why I use pop3.yahoo.com instead of pop.mail.yahoo.com.
Well, I simply wanted to test what happens if the user of my application inserts a wrong host name.
I believe that this issue is related to this report http://www.opensubscriber.com/message/javamail-interest#java.sun.com/180946.html where the poster claims that the problem occurs if the email server closes the connection. JavaMail then seems to wait very long (don't know why).
Since the issue wasn't resolved in the link I posted: Does somebody know how to fix or at least debug this?
Any help would be really appreciated!
I found the reason for the problem. It was a bug in my code. Javamail respects the timeout setting fine.
Most likely, yahoo is silently dropping all packets directed at that host. This is a tad annoying, because otherwise you'd immediately get back host unreachable or connection refused, which would be much easier to handle. Everything looks correct though, assuming you're using POP3 and not POP3S.
I see from the API that you can provide your own SocketFactory. Doing that you'd have greater control over the socket parameters, and you can test whether the socket is really being created correctly by JavaMail (if setting the SocketFactory property doesn't work, you know that's where to look). If all else fails, you could set up an extra thread that sets a timeout and interrupts the JavaMail thread when it expires. This is all workaround stuff of course.
It would also be helpful to check with netstat what state the connection is in. If it's going to timeout it should be in SYN_SENT.

Categories

Resources