圆满结束...谢谢大家~~

圆满结束...谢谢大家~~

圆满结束...谢谢大家~~
我要写一个带EXPECT模块的Server程序 现在一点头绪也没有 高手能不能帮我列一个思路
以及程序里所需要用到的参数 我刚接触Perl 还没有凭空写过程序 没有头绪啊

程序要求是这样的:

受到前台发来的socket消息
判断前4位是否为quit或cmds
如果不是,则丢弃

如果是cmd:,则向expect输出$cmd
获取的结果,socket发回给前台
同时记录到日志文件/slview/nms/logs/webterm/yyyymmdd/ip.log

如果是quit,则关闭expect
同时记录关闭连接信息到日志文件/slview/nms/logs/webterm/yyyymmdd/ip.log


急啊,明天要交工啦~~~~
[CCB]9[/CCB][CCB]9[/CCB][CCB]9[/CCB]




   

不用去管里面的乱七八糟的.
不用去管里面的乱七八糟的变量,我只是想知道结构就行,就是要用到的函数和参数的结构,我也不知道我说的对不对问的对不对,总之我已经抓狂了,弄了好几天根本没办法~~
5555555555555
期待中~~~[CCB]9[/CCB][CC.
期待中~~~[CCB]9[/CCB][CCB]9[/CCB][CCB]9[/CCB][CCB]9[/CCB]
#!/usr/bin/perl--use I.
#!/usr/bin/perl
use IO::Handle;
use Socket;
$port = 23;
$address = sockaddr_in ($port, INADDR_ANY);
socket (SERVER, PF_INET, SOCK_STREAM, 6);
bind (SERVER, $address);
listen (SERVER, 10);
SERVER->autoflush (1);
while (1) {
next unless (accept (CLIENT, SERVER));
vec (my $rin, fileno (CLIENT), 1) = 1;
CLIENT->autoflush (1);
my ($port, $iaddr) = sockaddr_in (getpeername (CLIENT));
my $peer_host = inet_ntoa ($iaddr);
while (1) {
my $line = <CLIENT>;
printf ("%s:%s %s", $peer_host, $port, $line);;
last if ($line =~ /^quit/ || $line !~ /^cmds(.*?)[\r\n]+$/);
my $cmdref = `$1`;
print CLIENT $cmdref;
}
close CLIENT;
}
close SERVER;
exit 1;



之後 telnet 127.0.0.1
再自行玩玩吧
谢谢谢谢,太感谢了~~我这就去试试~~ 你会万福的~~ [CCB]1[/CCB][CCB]1[/CCB][CCB]1[/CCB]
高手,还有问题,expect模块.
高手,还有问题,expect模块在哪里捏??
这句不懂: last if ($line.
这句不懂: last if ($line =~ /^quit/ || $line !~ /^cmds(.*?)[\r\n]+$/);

请指教~~
写了个初稿....帮忙指点~~
#!/usr/local/bin/perl

use strict;
use IO::Socket;
use Expect;

my $port='2001';
my $spawn_ok="not OK";
my $exp = Expect->spawn("telnet 10.0.0.191")
or die "Can't spawn unreliable process $!\n";

my $sock=IO::Socket::INET->new(listen => '20',
Localport => $port,
$Timeout => '5',
Reuse => '1',)
or die "Can't create listening socket:$!\n";
warn "Starting Server on port $port ...\n";


while (1) { my $buf = .....;
my $client;
my $ret = 0;
my $cmd;

if (accept($client,$server)){
$ret=read ($client,$buf);
if ($buf=~/^cmds/){
print "I got cmds,I can do expect cmds here.\n";
$exp -> expect($timeout,'$cmd');
$exp -> send("$buf\n");
}
elsif($buf=~/^quit/){
print "I got quit,I can send quit to expect here.\n";
$exp -> soft_close();
close $client;
close $server;
}
}
else next;
}


问题应该会有很多吧,不过尽力了,请大虾们指点啊~~




   

last if ($line =~ /^quit.
last if ($line =~ /^quit/ || $line !~ /^cmds(.*?)[\r\n]+$/);

条件满足跳出循环