Chinaunix

标题: [请教]perl中socket编程只返回部分结果问题.. [打印本页]

作者: hjleochen    时间: 2004-12-20 16:03
标题: [请教]perl中socket编程只返回部分结果问题..
我需要写一个socket程序,连接ftp或telnet(不能用NET::FTP库之类的),过程中遇到如下问题:

下面程序运行结果为:
220 Serv-U FTP Server v5.0 for WinSock ready...

而实际如果你用ftp客户端登陆时应该回显:
220 Serv-U FTP Server v5.0 for WinSock ready...
User (www.csdn.netnone)):

也就是换行后的内容没了?登陆telnet服务器也是一样的结果,,

是不是我少设置了什么函数或用错了哪个地方?
初学perl请多指教。。。找相关资料,看perldoc一天了没找到解决方法,谢谢

#!/usr/bin/perl -w
use strict;
use IO::Socket;

use Socket;
my $remote_host="www.csdn.net";
my $remote_port="21";

my $socket = IO::Socket::INET->;new("$remote_hostremote_port"
    or die "Couldn't connect to $remote_hostremote_port : $@\n";
$socket->;autoflush(1);

while (my $answer = <$socket>{
        print $answer."\n";
}

close($socket);
作者: flw    时间: 2004-12-20 16:08
标题: [请教]perl中socket编程只返回部分结果问题..
不要用钻石操作符(<>;)来操作 socket,
钻石操作符每次读取一个记录,
而 Perl 默认的记录分隔符是回车换行,
在你这个例子中,FTP 服务器返回的最后一行数据不是以回车符结尾的(注意用 FTP 客户端时光标停留的位置),
所以钻石操作符将一直等待,无法返回。

建议用 read。
作者: hjleochen    时间: 2004-12-20 17:04
标题: [请教]perl中socket编程只返回部分结果问题..
谢谢flw兄多次的热情帮助。。。

其实在这之前我已经试用read,recv以及delphi中的sock之类的都是返回一行,刚才又认真的想想,又试了试,
发现:
ftp服务器实际上只有返回:
220 Serv-U FTP Server 5.0 for WinSock ready...
这一行,而
User (www.csdn.netnone)):
实际上是ftp客户端打印出来了。。。

呵呵,一时没想明白,见笑了。。。
作者: flw    时间: 2004-12-20 18:41
标题: [请教]perl中socket编程只返回部分结果问题..
呵呵。
又长见识了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2