gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

perl编程: 用SOCKET来传输文件的PERL脚本

#SERVER
use strict;
my $port=$ARGV[0];
my $file=$ARGV[1];
my $PF_INET=2;
my $SOCK_STREAM=1;
my $local_addr=pack('SnC4x8',$PF_INET,$port,192,168,138,105);
socket(FILE_TRANS_SERV,$PF_INET,$SOCK_STREAM,getprotobyname('tcp')) or die("socket failed for $!");
bind(FILE_TRANS_SERV,$local_addr) or die("bind failed for $!");
listen(FILE_TRANS_SERV,3);
open(FILE,$file) or die("open failed for $!");
binmode(FILE);
seek(FILE,0,0);
for(;my $remote_addr=accept(FILE_TRANS_CLIENT,FILE_TRANS_SERV);close(FILE_TRANS_CLIENT)){
while(!eof(FILE)){
read(FILE,my $buffer,100);
send(FILE_TRANS_CLIENT,$buffer,0);
}#while
}#for
close(FILE_TRANS_SERV);
close(FILE);
1;
#CLIENT
use strict;
my $port=$ARGV[0];
my $file=$ARGV[1];
my $PF_INET=2;
my $SOCK_STREAM=1;
my $remote_addr=pack('SnC4x8',$PF_INET,$port,192,168,138,105);
socket(FILE_TRANS_CLIENT,$PF_INET,$SOCK_STREAM,getprotobyname('tcp')) or die("socket failed for $!");
open(SFILE,">$file") or die("file creation failed for $!");
binmode(SFILE);
connect(FILE_TRANS_CLIENT,$remote_addr) or die("connection failed for $!");
while(<FILE_TRANS_CLIENT>){
print SFILE $_;
}
close(FILE_TRANS_CLIENT);
close(SFILE);
1;
my用得有点乱,还好运行一些正常。
在网上没找不到这个主题的perl代码,所以自己写了个。
至于为什么用在while里用read(FILE,my $buffer,100),是怕如果一次全读入并传过去,内存会受不了。

posted on 2006-04-06 16:03 gyn_tadao 阅读(1592) 评论(1)  编辑 收藏 引用 所属分类: perl

评论

# re: 用SOCKET来传输文件的PERL脚本 2006-04-12 16:08 我的翻译博客

博客很漂亮,呵呵  回复  更多评论   

只有注册用户登录后才能发表评论。
<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜