PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Проблема с FTP сервером (Ошибка: Не удалось получить список каталог)


Проблема с FTP сервером (Ошибка: Не удалось получить список каталог)

Сообщений 1 страница 5 из 5

1

Здравствуйте, запускаю пример Atomic FTP Server, подключаюсь, а потом выходит ошибка, вот лог из FleZilla:

Статус: Соединяюсь с 46.175.161.147:21...
Статус: Соединение установлено, ожидание приглашения...
Ответ: 220 - Atomic FTP Server v0.1 ready
Команда: USER anonymous
Ответ: 331 - User anonymous accepted. Please enter your e-mail
Команда: PASS **************
Ответ: 230 - Welcome, enjoy this FTP site
Команда: SYST
Ответ: 215 - Atomic FTP Server v0.2
Команда: FEAT
Ответ: 500 - Unknow command
Статус: Сервер не поддерживает символы не ASCII.
Статус: Соединение установлено
Статус: Получение списка каталогов...
Команда: PWD
Ответ: 257 /
Команда: TYPE I
Ответ: 500 - Unknow command
Ошибка: Не удалось получить список каталогов

Что я делаю не правильно? папка существует, в ней есть файл, раньше вроде работало.
(Pure Basic 5.11 x86, Windows 8 x64)
FleZilla - проверял, к другим FTP серверам подключается, всё нормально.

Пробовал подключится через Pure Basic

Код:
InitNetwork()
  
  If OpenFTP(0, "46.175.161.147", "", "",21)
    If ExamineFTPDirectory(0)
      While NextFTPDirectoryEntry(0)
        Debug FTPDirectoryEntryName(0)
      Wend
    EndIf
  Else
    Debug "Не удалось подключиться"
  EndIf

Тоже ничего не возвращает. Помогите пожалуйста!

Отредактировано Racer (05.01.2014 13:32:58)

0

2

Судя по всему, не работает потому что сервер не поддерживает команду TYPE.

0

3

И что делать?

0

4

Нужно добавить ее поддержку.

0

5

Я добавлял, но с каталогами потом всё равно идет глюк, ничего не отображает, и ничего нельзя скачать \ загрузить.

Код:
;
; ------------------------------------------------------------
;
;       Atomic FTP Server in PureBasic by AlphaSND
;
;            (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
; This program isn't finished, the harder is done but I don't
; have the time to implement the whole RFC 959 commands :-).
; 
;
; 20/05/2002
;   Added a textgadget..
;   Updated for PureBasic 3.20 (Cleaned the code...)
;
; 19/03/2001
;   Listing is now working.
;
; 18/03/2001
;   Based on the Atomic Web Server code..
;   First version.
;

#Version = "0.2"

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0) : End
EndIf

ClientIP.s
Port = 21
BaseDirectory$    = "ftp/"
CurrentDirectory$ = BaseDirectory$
AtomicTitle$      = "Atomic FTP Server v"+#Version

EOL$ = Chr(13)+Chr(10)

*Buffer = AllocateMemory(10000)

If CreateNetworkServer(0, Port)

  OpenWindow(0, 300, 300, 230, 30, "Atomic FTP Server (Port "+Str(Port)+")")

  TextGadget(1, 10, 8, 200, 20, "Atomic FTP Server Ready.")
  
  Repeat
    
    WEvent = WindowEvent()
    SEvent = NetworkServerEvent()
  
    If WEvent = #PB_Event_CloseWindow
      Quit = 1
    EndIf

    If SEvent
      ClientID = EventClient()
  
      Select SEvent
      
        Case 1  ; New client connected
          SetGadgetText(1, "New client connected !")
          SendNetworkString(ClientID, "220 - Atomic FTP Server v0.1 ready"+EOL$)

        Case 4  ; New client has closed the connection
  
        Default
          RequestLength = ReceiveNetworkData(ClientID, *Buffer, 2000)
          If RequestLength > 3
            PokeL(*Buffer+RequestLength-2, 0)
          EndIf
          Gosub ProcessRequest
          
      EndSelect
    Else
      Delay(20)
    EndIf
    
  Until Quit = 1 
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

End 


ProcessRequest:

  Command$ = PeekS(*Buffer)
  
  Position = FindString(Command$, " ", 1)
  If Position
    Argument$ = Mid(Command$, Position+1, Len(Command$)-Position)
    Command$ = UCase(RTrim(Left(Command$, Position-1)))
  EndIf

  SetGadgetText(1, "Last command: "+Command$)

  Select Command$

    Case "HELP"
      Gosub Command_HELP

    Case "LIST"
      Gosub Command_LIST

    Case "PASS"
      Gosub Command_PASS

    Case "PORT"
      Gosub Command_PORT

    Case "PWD"
      Gosub Command_PWD

    Case "SYST"
      Gosub Command_SYST

    Case "USER"
      Gosub Command_USER
      
      Case "TYPE"
      Gosub Command_TYPE
      
    Default
      Gosub Command_UNKNOWN

  EndSelect

Return


Command_HELP:
  SendNetworkString(ClientID, "214 - You wanna some help ? :-D"+EOL$)
Return


Command_LIST:
  SendNetworkString(ClientID, "150 - Opening connection"+EOL$)
  
  FTPConnection = OpenNetworkConnection(ClientIP, ClientPort)
  If FTPConnection
    
    a$ = ""
    If ExamineDirectory(0, CurrentDirectory$, "*.*")
    
      NumberFiles = -1
      While NextDirectoryEntry(0)
        
        If DirectoryEntryType(0) = 2
          a$ = a$+"drwxr-xr-x 6 1024 512 Jan 23 10:18 "+DirectoryEntryName(0)+EOL$
        ElseIf Type = 1
          a$ = a$+"rwxr-xr-x 6 512 "+Str(DirectoryEntrySize(0))+" Jan 23 10:18 "+DirectoryEntryName(0)+EOL$
        EndIf
        
        NumberFiles+1
      Wend
    EndIf
    
    SendNetworkString(FTPConnection, "total "+Str(NumberFiles)+EOL$+a$)
    CloseNetworkConnection(FTPConnection)
  EndIf
  
  SendNetworkString(ClientID, "226 - Listing finished"+EOL$)
Return


Command_PASS:
  SendNetworkString(ClientID, "230 - Welcome, enjoy this FTP site"+EOL$)
Return


Command_PORT:

  ; Build a real IP
  ;
  ClientIP = ""
  
  Position = FindString(Argument$, ",", 1)
  ClientIP = ClientIP+Mid(Argument$, 1, Position-1)+"."

  NewPosition = FindString(Argument$, ",", Position+1)
  ClientIP = ClientIP+Mid(Argument$, Position+1, NewPosition-Position-1)+"."

  Position = FindString(Argument$, ",", NewPosition+1)
  ClientIP = ClientIP+Mid(Argument$, NewPosition+1, Position-NewPosition-1)+"."

  NewPosition = FindString(Argument$, ",", Position+1)
  ClientIP = ClientIP+Mid(Argument$, Position+1, NewPosition-Position-1)

  ClientIP = Trim(ClientIP)

  ; Get the port..
  ;
  Position = FindString(Argument$, ",", NewPosition+1)
  
  ClientPort = Val(Mid(Argument$, NewPosition+1, Position-NewPosition-1)) << 8+Val(Right(Argument$, Len(Argument$)-Position))

  SendNetworkString(ClientID, "200 - Ok"+EOL$)
Return


Command_PWD:
  SendNetworkString(ClientID, "257 /"+EOL$)
Return


Command_UNKNOWN:
  SendNetworkString(ClientID, "500 - Unknow command"+EOL$)
Return


Command_USER:
  If Argument$ = "anonymous"
    a$ = "331 - User anonymous accepted. Please enter your e-mail"+EOL$
  Else
    a$ = "331 - Hello "+Argument$+". Please enter your password"+EOL$
  EndIf

  SendNetworkString(ClientID, a$)
Return

Command_TYPE:
  SendNetworkString(ClientID, "200 TYPE is now 8-bit binary"+#Version+EOL$)
Return


Command_SYST:
  SendNetworkString(ClientID, "215 - Atomic FTP Server v"+#Version+EOL$)
Return

Есть ли вообще рабочий код фтп сервера?

Отредактировано Racer (05.01.2014 16:19:32)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Проблема с FTP сервером (Ошибка: Не удалось получить список каталог)