Gentili amici,
ho realizzato un'applicazione in C# che colloquia in ftp con un AC500. Dato che il controllore non ricnosceva alcune parole chiave dello standar ftp ho dovuto realizzare io il protocollo utilizzando un oggetto TCPClient. L'applicazione funziona ma quando la qualità della conessione diminuisce le richieste che faccio al dispositivo non vanno a buon fine. quale potrebbe essere la causa? Come posso migliorare?
Posto il codice
<code>
myClient = new TcpClient(Server, 21);
if (myClient != null)
{
string ind = this.IP;
myClient.GetStream().Close();
myClient.Close();
myClient = null;
}
stream = myClient.GetStream();
dataLength = stream.Read(receiveData, recOffset, receiveData.Length);
String recvdMessage = System.Text.Encoding.ASCII.GetString(receiveData, 0, dataLength);
String message = "USER " + this.user + "\r\n";
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
message = "PASS " + this.password + "\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// wait for a response
while (!stream.DataAvailable)
{
}
message = "CWD /" + this.pathFile + "\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
while (!stream.DataAvailable)
{
}
message = "PWD\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
while (!stream.DataAvailable)
{
}
message = "TYPE I\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// wait for a response
while (!stream.DataAvailable)
{
}
string hostname = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostByName(hostname);
IPAddress[] addresses = ipEntry.AddressList;
string IP = addresses[0].ToString().Replace('.', ',');
int port1 = this.portaAscolo / 256;
int port2 = this.portaAscolo - (port1 * 256);
message = "PORT " + IP + "," + port1 + "," + port2 + "\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
// wait for a response
while (!stream.DataAvailable)
{
}
if (stream.CanRead)
{
byte[] bytes = new byte[myClient.ReceiveBufferSize];
stream.Read(bytes, 0, (int)myClient.ReceiveBufferSize);
string returndata = Encoding.UTF8.GetString(bytes);
}
message = "RETR " + this.nomeFile + "\r\n";
data = System.Text.Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
while (!stream.DataAvailable)
{
}
</code>