I'm using this FtpClient library to connect to mainframe from WinForms application. I'm using thread.Sleep for the thread to wait for the response before it starts reading, otherwise it freezes. Is there an alternative to do this?
public void Login()
{
if (this.loggedin) this.Close();
Debug.WriteLine("Opening connection to " + this.server, "FtpClient");
IPAddress addr = null;
IPEndPoint ep = null;
try
{
this.clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
addr = Dns.Resolve(this.server).AddressList[0];
ep = new IPEndPoint(addr, this.port);
this.clientSocket.Connect(ep);
}
catch (Exception ex)
{
// doubtfull
if (this.clientSocket != null && this.clientSocket.Connected) this.clientSocket.Close();
throw new FtpException("Couldn't connect to remote server", ex);
}
**Thread.Sleep(4000);**
this.readResponse();
...
}
private void readResponse()
{
this.message = "";
this.result = this.readLine();
if (this.result.Length > 3)
this.resultCode = int.Parse(this.result.Substring(0, 3));
else
this.result = null;
}
private string readLine()
{
while (true)
{
this.bytes = clientSocket.Receive(this.buffer, this.buffer.Length, 0);
this.message += ASCII.GetString(this.buffer, 0, this.bytes);
if (this.bytes < this.buffer.Length) break;
}
string[] msg = this.message.Split('\n');
if (this.message.Length > 2)
{
this.message = msg[msg.Length - 2];
try { response = msg[msg.Length - 3]; }
catch { }
}
else
{
this.message = msg[0];
}
if (this.message.Length > 4 && !this.message.Substring(3, 1).Equals(" ")) return this.readLine();
if (this.verboseDebugging)
{
for (int i = 0; i < msg.Length - 1; i++)
{
Debug.Write(msg[i], "FtpClient");
}
}
return message;
}
public void sendCommand(String command)
{
if (this.verboseDebugging) Debug.WriteLine(command, "FtpClient");
Byte[] cmdBytes = Encoding.ASCII.GetBytes((command + "\r\n").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}