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. Ubuntu 14.04 LTS 与Kylin

    现在是安装了Ubuntu 14.04 LTS 但是通过安装ubuntukylin 这个包居然实现了Kylin--原来这个自主研发还这么方便-呵呵 sudo apt-get install ubuntu ...

  2. LeetCode 342

    Power of Four Given an integer (signed 32 bits), write a function to check whether it is a power of ...

  3. 自定义android Dialog

    1.自定义Dialog: import android.app.AlertDialog; import android.app.Dialog; import android.content.Conte ...

  4. linux下svn命令常用操作

    1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:s ...

  5. 【解决】应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。

    换了SSD硬盘,装了Windows 7 SP1 x64的系统.用了一段时间,突然一天有些软件打不开了.弹出下面的提示 应用程序无法正常启动(0xc000007b).请单击“确定”关闭应用程序.第一时间 ...

  6. bootstrap的滚动监听

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  7. 自动恢复被挂掉的hbase region server

    最近老遇到hbase的regionserver自动挂掉的情况 日志总是看不出什么原因 不得已弄了个定时任务,任务的脚本类似是: pssh -H "bluejoe1 bluejoe2...&q ...

  8. Swift字典类

    在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合.键集合不能重复,值集合没有特殊要求.键和值集合中的元素可以是任何对象,但是不能是nil.Foundation框架字典类也分为 ...

  9. Cocos2d-x加速度计

    加速度计是一种能够感应设备一个方向上线性加速度的传感器.广泛用于航空.航海.宇航及武器的制导与控制中.线加速度计的种类很多,在iOS等移动设备中目前采用的是三轴加速度计,可以感应设备上X.Y.Z轴方向 ...

  10. 逻辑推理:在一个100条语句的列表中,第n条语句是“在这个列表中,恰有n条语句为假”,可以得出什么结论?

    <离散数学及其应用>第六版1.1练习题第43题的个人分析 题目:在一个100条语句的列表中,第n条语句是"在这个列表中,恰有n条语句为假"..........      ...