perl,后来我又改过了增加了一些交互和数据库检测的功能。主要用于收集ip、mac、姓名、房间,后来又加入了维修记录的功能。服务器端接受数据并存入数据库中。

代码如下:

主要用于收集ip、mac、姓名、房间,后来又加入了维修记录的功能。服务器端接受数据并存入数据库中。

#############################

use strict;

use Tk;

use Encode;

#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/200 100/);

$mw->maxsize(qw/200 100/);

#三个Frame

$label_room = $mw->Frame( qw/-borderwidth 2 -relief groove/ )->pack( qw/-side top -fill both/ );

$label_name = $mw->Frame( qw/-borderwidth 2 -relief groove/ )->pack( qw/-side top -fill both/ );

$label_ctrl = $mw->Frame( qw/-borderwidth 2 -relief groove/ )->pack( qw/-side top -fill both/ );

#房间号码输入

$label_room->Label(-text => hanzi('房间号码'))->pack(qw/-side left -expand 1/);

$label_room->Entry(-textvariable => \$room, -relief => 'groove')->pack(qw/-side right -expand 1/);

#姓名输入

$label_name->Label(-text => hanzi('姓名'))->pack(qw/-side left -expand 1/);

$label_name->Entry(-textvariable => \$name, -relief => 'groove')->pack(qw/-side right -expand 1/);

#确定与重置

$enter = $label_ctrl->Button(-text => hanzi('确定'), -command => \&enter)->pack(qw/-side left -expand 1/);

$cancel = $label_ctrl->Button(-text => hanzi('重置'), -command => \&cancel)->pack(qw/-side right -expand 1/);

#提示

$label_notice = $mw->Label(-text => hanzi('欢迎使用'), -relief => 'groove', -background => '#FFFF99')->pack(qw/-side bottom -fill x/);

MainLoop();

#汉字解码

sub hanzi{

return decode('gb2312', shift);

}

#确定函数

sub    enter{

chomp($room);

chomp($name);

$room =~ s/^\s+//;

$name =~ s/^\s+//;

if($room eq '' or $name eq ''){

$label_notice->configure(-text => hanzi('输入不能为空')) ;

return 0;

}#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($_ = ~/IP Address/){

$_ = ~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

}

#重置函数

sub cancel{

$label_notice->configure(-text => hanzi('重置为空'));

$room = '';

$name = '';

}

详细出处参考:http://www.jb51.net/article/15458.htm

【转】用perl写的单位电脑信息采集程序的更多相关文章

  1. 自己写的browse.bat与perl写的url_handler.pl的比较

    以前自己也写过Windows下自动打开多个浏览器测试某个URI,提高浏览器兼容性测试效率. 但是写的browse.bat文件还是最基础简陋的 @echo off if '%1'=='-c' ( sta ...

  2. 再议perl写多线程端口扫描器

    再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...

  3. Python3的tkinter写一个简单的小程序

    一.这个学期开始学习python,但是看了python2和python3,最后还是选择了python3 本着熟悉python的原因,并且也想做一些小程序来增加自己对python的熟练度.所以写了一个简 ...

  4. # C#不登录电脑启动程序

    我们知道开机自启动程序如果在用户不登录的情况下是不启动的,但是服务类程序是可以跨过用户登录启动的,例如IIS服务,SQL服务.如果我们已经写好了桌面应用程序,又希望他开机自启动,那就需要借助系统服务在 ...

  5. (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...

  6. 用Racket语言写了一个万花筒的程序

    用Racket语言写了一个万花筒的程序 来源:https://blog.csdn.net/chinazhangyong/article/details/79362394 https://github. ...

  7. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  8. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  9. 【译】写个好的 CLI 程序

    写个好的 CLI 程序 Write a Good CLI Program 译文 原文链接:https://qiita.com/tigercosmos/items/678f39b1209e60843cc ...

随机推荐

  1. Debian 7 64位安装 wine

    一.安装 1. # apt-get install wine 安装完后在终端里运行wine: # wine 会弹出一个对话框: This is the wine64-bin helper packag ...

  2. PE制作实录 —— 定义我的 PE 工具箱

    Step 1 想个好听的名字 我倒是没什么文化,洋气点又要方便记忆,最终锁定 Operit! ,源自英语 Operate .it ,合并一下再加上感叹号,洋气吧~ Step 2 利用百草霜制作 Mes ...

  3. Linux 命令 - head: 打印文件的开头部分

    命令格式 head [OPTION]... [FILE]... 命令参数 -c, --bytes=[-]K 显示每个文件的前 K 字节内容. -n, --lines=[-]K 显示每个文件的前 K 行 ...

  4. Android 中的 Service 全面总结 (转)

    原文地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 1.Service的种类   按运行地点分类: 类别 区别  优点 ...

  5. ajax-典型应用-验证用户名

    用servlet实现后台:

  6. 如何获取Window

    [[UIApplication sharedApplication].delegate window]

  7. ASP.NET实现折线图的绘制

    用到.Net中绘图类,实现折线图的绘制,生成图片,在页面的显示,代码如下: /// <summary> /// 获取数据 /// strChartName:图名称: /// yName:纵 ...

  8. (转)linux下jvm 参数调优

    1.基本概念. JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn512m -XX:PermSize=128m -Xss256k -XX:+DisableE ...

  9. 开发者需要知道的11条HTML5小常识

    #HTML5: The Missing Manual# 如果说HTML是一部电影,那HTML5就是一次大转折.HTML本来是不会活过21世纪的.官方Web标准组织W3C在1998年对HTML就已经撒手 ...

  10. maven安装配置(myeclipse)(一)

    欢迎转载:http://www.cnblogs.com/shizhongtao/p/3374130.html 对于我来说,maven主要用于jar包的管理,避免项目中频繁更换jar的版本,以及网上搜索 ...