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. this的分析分支

    最近看到这个题目,开始不太理解,但是仔细的看完this之后,觉得懂了一些 function Foo() { getName = function () { alert (1); }; return t ...

  2. DataTables warning (table id = 'myTable'): Requested unknown parameter '0' from the data source for row 0

    第一种方式:不用在js里设置列Html: <table id="myTable"> <thead> <tr> <th>Title-1 ...

  3. SSIS 学习(4):变量和表达式【转】

    变量,作为程序员的我们,是一个多么熟悉的概念,从开始学习编程的第一天起,就要了解什么是变量?如何定义一个变量?变量的使用范围等.现在还有必 要在这里大费口舌来讨论“变量”吗?不错,我们今天谈的变量,也 ...

  4. UVA 539 The Settlers of Catan dfs找最长链

    题意:画边求最长链,边不能重复数点可以. 很水,用暴力的dfs即可,因为数据不大. 本来以为可以用floyd进行dp的,后来想想好像不能在有回路上的图跑...于是没去做. #include <c ...

  5. 命令行界面下用户和组管理之groupadd的使用

    groupadd - create a new group groupadd命令用于创建一个新的组 语法     groupadd [options] group 选项:    -h 获得帮助信息   ...

  6. asp.net连接oracle无法进行中文字符查询的问题

    用 select * from nls_database_parameters where parameter = 'NLS_CHARACTERSET' 查询服务器字符集为 AL32UTF8 数据库连 ...

  7. hdu 2709 Sumsets

    Sumsets Time Limit: 6000/2000 MS (Java/Others)     Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. 利用jQuery实现选项卡

    /*Tab 选项卡 标签*/ $(function(){ var $div_li =$("div.tab_menu ul li"); $div_li.click(function( ...

  9. C#中thrift 中THttpHandler 传输数据 慢 slow 解决办法

    1. 在用c# 写thrift的服务端,来相应http请求,在用结构体传输时,会遇到一个问题,就是(在用网络)传输数据特别慢, 这是由于在发生数据是用的TStreamTransport 导致每传一个数 ...

  10. EF4.1之Code first 的几种连接数据库的方式

    通过代码 进行连接和创建数据库的方法主要分为两种: 1.使用用连接字符串(在配置文件里面): 连接字符串: <add name="DbEntities" connection ...