Доброго времени суток.
Приведу часть программы, которая получает список дирикторий с сервера.
public string ListDir()
{
string command ="";
Socket sss = getDataSocket ();
command = "LIST";
command +="\r\n" ;
ClientSocket.Send(Encoding.ASCII.GetBytes(command), command.Length, 0);
Response();
Byte[] readBytes;
int sizeReceived;
string serverMessage = "";
do
{
readBytes = new Byte[READ_BUFFER_SIZE];
sizeReceived = sss.Receive(readBytes, readBytes.Length, SocketFlags.None);
serverMessage += Encoding.ASCII.GetString(readBytes, 0, sizeReceived);
if ( sizeReceived == 0 ) break ;
}
while (true); //sizeReceived == readBytes.Length & !serverMessage.EndsWith("\r\n")); // Go back for more if necessary
return serverMessage;
if (firstTime)
{
Response();
firstTime = false;
}
}
private Socket getDataSocket ()
{
Socket pasvSocket;
string command = "PASV";//PASV:Specifies that the server data transfer process is to listen for a connection request from the client data transfer process.
command += "\r\n";
ClientSocket.Send(Encoding.ASCII.GetBytes(command), command.Length, 0);
//if(firstTime)
//{
// Response();
// firstTime=false;
//}
// Get server IP and port address, response sample is: .... (196,1,64,106,5,129)
string fullAddress =Response();
if (fullAddress.Substring(0,3) != "227")
{
fullAddress =Response();
}
fullAddress = fullAddress.Remove(0, fullAddress.IndexOf('(') + 1);//takes only what is
fullAddress = fullAddress.Substring(0, fullAddress.IndexOf(')'));//between paranthesis
string[] addressParts = fullAddress.Split(',');
string pasvAddress = addressParts[0] + "." + addressParts[1] + "." + addressParts[2] + "." + addressParts[3];
int pasvPort = Convert.ToInt32(addressParts[4]) * 256 + Convert.ToInt32(addressParts[5]);
// Open the Data socket
pasvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
pasvSocket.Connect(new IPEndPoint(IPAddress.Parse(pasvAddress),pasvPort));
return pasvSocket;//return the created socket
}
Возможно моя участь быть избитым ногами, но всё же осмелюсь спросить - кирилицу получить (в виде русских папок и т.п.) таким образом не получается, где грабли ?
Если нет возможности обяснить - ткните меня куда-нть шоб почитать для самообразования. За любую ценную информацию буду благодарен.
Приведу часть программы, которая получает список дирикторий с сервера.
public string ListDir()
{
string command ="";
Socket sss = getDataSocket ();
command = "LIST";
command +="\r\n" ;
ClientSocket.Send(Encoding.ASCII.GetBytes(command), command.Length, 0);
Response();
Byte[] readBytes;
int sizeReceived;
string serverMessage = "";
do
{
readBytes = new Byte[READ_BUFFER_SIZE];
sizeReceived = sss.Receive(readBytes, readBytes.Length, SocketFlags.None);
serverMessage += Encoding.ASCII.GetString(readBytes, 0, sizeReceived);
if ( sizeReceived == 0 ) break ;
}
while (true); //sizeReceived == readBytes.Length & !serverMessage.EndsWith("\r\n")); // Go back for more if necessary
return serverMessage;
if (firstTime)
{
Response();
firstTime = false;
}
}
private Socket getDataSocket ()
{
Socket pasvSocket;
string command = "PASV";//PASV:Specifies that the server data transfer process is to listen for a connection request from the client data transfer process.
command += "\r\n";
ClientSocket.Send(Encoding.ASCII.GetBytes(command), command.Length, 0);
//if(firstTime)
//{
// Response();
// firstTime=false;
//}
// Get server IP and port address, response sample is: .... (196,1,64,106,5,129)
string fullAddress =Response();
if (fullAddress.Substring(0,3) != "227")
{
fullAddress =Response();
}
fullAddress = fullAddress.Remove(0, fullAddress.IndexOf('(') + 1);//takes only what is
fullAddress = fullAddress.Substring(0, fullAddress.IndexOf(')'));//between paranthesis
string[] addressParts = fullAddress.Split(',');
string pasvAddress = addressParts[0] + "." + addressParts[1] + "." + addressParts[2] + "." + addressParts[3];
int pasvPort = Convert.ToInt32(addressParts[4]) * 256 + Convert.ToInt32(addressParts[5]);
// Open the Data socket
pasvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
pasvSocket.Connect(new IPEndPoint(IPAddress.Parse(pasvAddress),pasvPort));
return pasvSocket;//return the created socket
}
Возможно моя участь быть избитым ногами, но всё же осмелюсь спросить - кирилицу получить (в виде русских папок и т.п.) таким образом не получается, где грабли ?
Если нет возможности обяснить - ткните меня куда-нть шоб почитать для самообразования. За любую ценную информацию буду благодарен.