免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1801 | 回复: 3
打印 上一主题 下一主题

[请教]perl中socket编程只返回部分结果问题.. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-20 16:03 |只看该作者 |倒序浏览
我需要写一个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);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-12-20 16:08 |只看该作者

[请教]perl中socket编程只返回部分结果问题..

不要用钻石操作符(<>;)来操作 socket,
钻石操作符每次读取一个记录,
而 Perl 默认的记录分隔符是回车换行,
在你这个例子中,FTP 服务器返回的最后一行数据不是以回车符结尾的(注意用 FTP 客户端时光标停留的位置),
所以钻石操作符将一直等待,无法返回。

建议用 read。

论坛徽章:
0
3 [报告]
发表于 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客户端打印出来了。。。

呵呵,一时没想明白,见笑了。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2004-12-20 18:41 |只看该作者

[请教]perl中socket编程只返回部分结果问题..

呵呵。
又长见识了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP