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. cx_Oracle安装说明

    简介 cx_Oracle是用python连接oracle的驱动模块,参考文章: [cx_Oracle文档](http://cx-oracle.sourceforge.net/html/index.ht ...

  2. 关于使用vss版本管理工具中的sln,suo文件作用

    Visual Studio.NET采用两种文件类型(.sln和.suo)来存储特定于解决方案的设置,它们总称为解决方案文件.为解决方案资源管理器提供显示管理文件的图形接口所需的信息 从而在每次继续开发 ...

  3. poj 3164 最小树形图

    思路:就是裸的最小树形图~ #include<iostream> #include<cstdio> #include<cstring> #include<cm ...

  4. SuperMapDeskTop中去除面图层边框

    0.项目中有个功能需要在超图DeskTop中修改面图层的符号,将要素的边框去掉.搞来搞去这个功能并不像ArcGisDeskTop一样直接有无边框的符号,通过请教,通过修改面图层的线样式的RGB颜色管理 ...

  5. 初识CSS3之媒体查询(2015年05月31日)

    一.什么是媒体查询 媒体查询是面向不同设备提供不同样式的一种实现方式,它可以为每种类型的用户提供最佳的体验,也是响应式设计的实现方式. 现今每天都有更多的手机和平板电脑问市.消费者能够拥有可想象到的各 ...

  6. javascript+dom 做javascript图片库

    废话不多说 直接贴代码 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  7. MyBatis(3.2.3) - Configuring MyBatis using XML, Settings

    The default MyBatis global settings, which can be overridden to better suit application-specific nee ...

  8. asp.net常见面试题(一)

    1.索引器 class Player { ]; public int this[int index] { get { || index >= ) { ; } else { return arr[ ...

  9. Forms身份认证

    引言 大家都知道Http是无状态的协议,所以访问一个url,你并不能知道用户在之前是否已经登陆过.但是许多业务上的逻辑又离不开user的信息,这个时候就可以借助身份认证来记录当前user的登录状态.这 ...

  10. 关于java的static关键字

    通常来说,当你创建类时,就是在描述那个类的对象的外观与行为.除非你用new创建那个类的对象,否则,你实际上并未获得任何东西.当你用new来创建对象时,数据存储空间才被分配,其方法才供外界调用. 但是有 ...