Avatar billede petercal Nybegynder
09. august 2006 - 19:42 Der er 9 kommentarer og
2 løsninger

Perl Net::FTP spørgsmål - Unexpected EOF on command channel

Jeg prøver at bruge Net::FTP i Perl, mit problem er at ls ikke virker, og forbindelsen lukker. Jeg kører mod en standard FTP server på Solaris 9.

Kender nogen dette problem ?

  $ftp = Net::FTP->new("172.17.16.xxx", Debug => 1, Timeout => 120, Passive => 1)
        or die "Cannot connect to Sparesun: $@";

  print $ftp->message;

  $ftp->login('xxxxx','xxxxxxx')
        or die "Cannot login ", $ftp->message;

  print $ftp->message;


  $ftp->type("A");


  print $ftp->message;

her går det galt, både ls og dir

  @files = $ftp->dir();
  foreach $file (@files) {print "$file\n"};


  $ftp->quit;

Debug trace

D:\Perl\Projects\Perl_Net_FTP>d:\perl\bin\perl.exe ftp1.pl d:\perl\projects\perl
_net_ftp\input.ini
Net::FTP>>> Net::FTP(2.75)
Net::FTP>>>  Exporter(5.58)
Net::FTP>>>  Net::Cmd(2.26)
Net::FTP>>>  IO::Socket::INET(1.29)
Net::FTP>>>    IO::Socket(1.29)
Net::FTP>>>      IO::Handle(1.25)
Net::FTP=GLOB(0x1ca0db0)<<< 220 sparesun FTP server ready.
sparesun FTP server ready.
Net::FTP=GLOB(0x1ca0db0)>>> user admin
Net::FTP=GLOB(0x1ca0db0)<<< 331 Password required for admin.
Net::FTP=GLOB(0x1ca0db0)>>> PASS ....
Net::FTP=GLOB(0x1ca0db0)<<< 230-No directory! Logging in with home=/
Net::FTP=GLOB(0x1ca0db0)<<< 230 User admin logged in.
No directory! Logging in with home=/
User admin logged in.
Net::FTP=GLOB(0x1ca0db0)>>> TYPE A
Net::FTP=GLOB(0x1ca0db0)<<< 200 Type set to A.
Type set to A.
Net::FTP=GLOB(0x1ca0db0)>>> PASV
Net::FTP: Unexpected EOF on command channel at ftp1.pl line 110
Cannot change directory Connection closed at ftp1.pl line 120, <DATA> line 164.
Connection closed
Avatar billede nielle Nybegynder
09. august 2006 - 19:53 #1
Nu findes der jo nogle forskellige Net::FTP pakker, så det er ikke lige til at vide hvilken du bruger.

Men nurde det ikke være:

$ftp->quit();

- i stedet for:

$ftp->quit;
Avatar billede petercal Nybegynder
09. august 2006 - 20:40 #2
Jo, syntax er muligvis forkert, men det går galt inden da.
Perl version er ActivePerl 5.8.8.817
Avatar billede petercal Nybegynder
09. august 2006 - 20:41 #3
Jeg prøver test af $ftp->quit() i morgen
Avatar billede nielle Nybegynder
09. august 2006 - 20:42 #4
Er det i kaldet:

@files = $ftp->dir();

- at den går galt? Får du ikke nogen liste?
Avatar billede petercal Nybegynder
09. august 2006 - 21:01 #5
nej, jeg får ingen liste .. dir eller ls er det samme

@files = $ftp->dir();
  foreach $file (@files) {print "$file\n"};

og der sker dette

Net::FTP=GLOB(0x1ca0db0)>>> PASV
Net::FTP: Unexpected EOF on command channel at ftp1.pl line 110
Avatar billede nielle Nybegynder
09. august 2006 - 21:03 #6
Hvad for en linje er 110?
Avatar billede petercal Nybegynder
10. august 2006 - 05:19 #7
@files = $ftp->dir();
Avatar billede nielle Nybegynder
10. august 2006 - 07:07 #8
Det lader til at der er en fejl i din Net:FTP pakke.

Enten det, eller også skyldes fejlen noget af den kode du ikke har vist endnu.
Avatar billede petercal Nybegynder
10. august 2006 - 17:57 #9
Så lykkedes det, Passive skal sættes til 0

  $ftp = Net::FTP->new("172.17.16.xxx", Debug => 1, Timeout => 600, Passive => 0)
        or die "Cannot connect to Sparesun: $@";

  @files = $ftp->ls("/etc");
  foreach $file (@files) {print "$file\n"};

output

Net::FTP=GLOB(0x1bb3058)<<< 200 PORT command successful.
Net::FTP=GLOB(0x1bb3058)>>> NLST /etc
Net::FTP=GLOB(0x1bb3058)<<< 150 Opening ASCII mode data connection for file list
.
Net::FTP=GLOB(0x1bb3058)<<< 226 Transfer complete.
/etc/TIMEZONE
/etc/acct
/etc/aliases
/etc/apache
/etc/appserver
/etc/auto_home
/etc/auto_master

Men tak for indsatsen
Avatar billede petercal Nybegynder
10. august 2006 - 17:59 #10
Problemet er løst
Avatar billede petercal Nybegynder
10. august 2006 - 18:03 #11
Ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester