复制代码 代码如下:
主要用于收集ip、mac、姓名、房间,后来又加入了维修记录的功能。服务器端接受数据并存入数据库中。
#############################
usestrict;
useTk;
useEncode;
#SOCKE参数
my$PF_INET=2;
my$port=2345;
my$remote_addr=pack('SnC4x8',$PF_INET,$port,192,168,138,228);
my$SOCK_DGRAM=2;
#Frame
my($label_room,$label_name,$label_ctrl,$label_notice);
#确定、取消
my($enter,$cancel);
#房间、姓名变量
my($room,$name);
$room='';
$name='';
#主界面
my$mw=MainWindow->new(-title=>hanzi('信息收集'));
$mw->minsize(qw/200100/);
$mw->maxsize(qw/200100/);
#三个Frame
$label_room=$mw->Frame(qw/-borderwidth2-reliefgroove/)->pack(qw/-sidetop-fillboth/);
$label_name=$mw->Frame(qw/-borderwidth2-reliefgroove/)->pack(qw/-sidetop-fillboth/);
$label_ctrl=$mw->Frame(qw/-borderwidth2-reliefgroove/)->pack(qw/-sidetop-fillboth/);
#房间号码输入
$label_room->Label(-text=>hanzi('房间号码'))->pack(qw/-sideleft-expand1/);
$label_room->Entry(-textvariable=>$room,-relief=>'groove')->pack(qw/-sideright-expand1/);
#姓名输入
$label_name->Label(-text=>hanzi('姓名'))->pack(qw/-sideleft-expand1/);
$label_name->Entry(-textvariable=>$name,-relief=>'groove')->pack(qw/-sideright-expand1/);
#确定与重置
$enter=$label_ctrl->Button(-text=>hanzi('确定'),-command=>&enter)->pack(qw/-sideleft-expand1/);
$cancel=$label_ctrl->Button(-text=>hanzi('重置'),-command=>&cancel)->pack(qw/-sideright-expand1/);
#提示
$label_notice=$mw->Label(-text=>hanzi('欢迎使用'),-relief=>'groove',-background=>'#FFFF99')->pack(qw/-sidebottom-fillx/);
MainLoop();
#汉字解码
subhanzi{
returndecode('gb2312',shift);
}
#确定函数
subenter{
chomp($room);
chomp($name);
$room=~s/^s+//;
$name=~s/^s+//;
if($roomeq''or$nameeq''){
$label_notice->configure(-text=>hanzi('输入不能为空'));
return0;
}#if
else{
open(IPCF,'-|',"ipconfig-all");
my($mac_addr,$ip_addr,$out_buffer);
while(<IPCF>){
chomp;
if($_=~s/(.*)(00(-[0-9A-Z]{2}){5})(.*)/$2/){
$mac_addr=join('',split(/-/,$_));
}
if($_=~/IPAddress/){
$_=~s/(.*)([0-9]{3}(.[0-9]{1,3}){3})(.*)/$2/;
$ip_addr=$_;
}
}#while
$out_buffer=$room."t".$mac_addr."t".$ip_addr."t".encode('utf8',$name);
socket(UDP_CLIENT,$PF_INET,$SOCK_DGRAM,getprotobyname('udp'));
send(UDP_CLIENT,$out_buffer,0,$remote_addr);
close(UDP_CLIENT);
close(IPCF);
$mw->destroy();
}#else
}
#重置函数
subcancel{
$label_notice->configure(-text=>hanzi('重置为空'));
$room='';
$name='';
}