Hej! Hej, Koden är inte helt olik min, och borde ha samma problem, skulle jag tro, den funkar på dom flesta, men så fort en server skickar ett välkomst meddelande på typ 20 rader (eller nåt?) buggar det och den missar att ta emot sista raden. Ftp servern jag upptäckte detta mot var Raiden ftpd. Har inte hittat någon annan som inte fungerar än.ftp och sockets
Jag håller på att skriva en ftp klient, men jag har stött på patrull. Så här ligger det till; Jag kan ansluta och logga in till min lokala ftp server o hämta fillista, ladda hem en fil osv. Men då fort jag ansluter till någon på nätverket funkar det inte. Så här blir det ungefär.
Ansluter...
Tar emot välkommst msg...
Skickar USER anv...
Skickar PASS psw...
Felmeddelande från servern: PASS psw not implemted... (500 el. 502 minns inte riktigt)
Vissa gånger när jag ansluter får jag tillbaka ett meddelande efter jag skcikar USER som säger "Password required", men dom gångerna blir det problem sen ändå, för att sista raden i välkommstmeddelandet (Det efter man har loggat in) kommer inte med i den bufferten som resten av meddelandet. Raden lyder "230 User anv has logged in." el liknande. Samma problem uppstår när jag skickar andra kommandon också.
Alltså, om det jag ska ta emot från servern är mer än en rad är det ganska stor chans att den glömmer sista raden... vad beror det på?
Detta betyder att när jag skickar nästa kommando och tar emot ett svar får jag det som skulle varit på sista raden i det förra kommandots svar... Weird...
Är ganska nybörjare på det här med sockets och ftp på hyffsat låg nivå.
Tacksam för svar!Sv: ftp och sockets
Kan inte direkt svara på vad du gjort för fel, här har du en enkel implementation jag skängt ihop.
Kanske du kan få idéer från den. Annars så kan du kolla RFCn för FTP protocollet. En annan sak är att det faktiskt finns massor med redan färdigkodade ftp klasser för .Net bara o leta lite.
I .Net 2.0 kommer det även ett FTP Stöd. Lite kort info:
http://www.nsquared2.net/johan/viewpost.aspx?PostID=10
<code>
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Nsquared2.Net.FTP
{
/// <summary>
/// Summary description for FTPClient.
/// </summary>
public class FTPClient
{
protected Socket clientSocket;
protected string hostName;
protected int port;
protected string receivedData = null;
protected int StatusValue = 220;
protected static int BUFFER_SIZE = 512;
protected byte[] buffer = new Byte[BUFFER_SIZE];
public string HostName
{
get{return(hostName);}
set{hostName = value;}
}
public int Port
{
get{return(port);}
set{port = value;}
}
public FTPClient()
{}
public string Login(string userName,string password)
{
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
clientSocket.Connect(new IPEndPoint(GetIPAddress(),port));
ReadNetworkStream();
if(StatusValue != 220)
throw new Exception(receivedData);
SendCommand("USER "+ userName);
if(StatusValue != 331)
throw new Exception(receivedData);
SendCommand("PASS "+ password);
if(StatusValue != 230)
throw new Exception(receivedData);
SendCommand("STORE YOU_HAVE_BEEN_HACKED!!!");
return(receivedData);
}
private void ReadNetworkStream()
{
int ReceivedValue = clientSocket.Receive(buffer,0,buffer.Length,0);
receivedData = Encoding.ASCII.GetString(buffer,0,ReceivedValue);
StatusValue = Int32.Parse(receivedData.Substring(0,3));
}
private IPAddress GetIPAddress()
{
long IPAddressValue = System.Net.Dns.GetHostByName(hostName).AddressList[0].Address;
return(new IPAddress(IPAddressValue));
}
private void SendCommand(string command)
{
Byte[] commandByte = Encoding.ASCII.GetBytes(command+"\r\n");
clientSocket.Send(commandByte,commandByte.Length,0);
ReadNetworkStream();
}
}
}
</code>
Mvh JohanSv: ftp och sockets
Verkar vara ett svårlöst problem, ska gå in o kolla lite på rfc:t lite oxå kanske hittar något nyttigt att veta där...