一、简介
    Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
    Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
    Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

Nagios 可以监控的功能有:

监控网络服务(SMTP、POP3、HTTP、PING等);
        监控主机资源(处理器负荷、磁盘利用率等);
        简单地插件设计使得用户可以方便地扩展自己服务的检测方法;
        当服务或主机问题产生与解决时将告警发送给联系人(通过EMail、短信、用户定义方式);
        可以定义一些处理程序,使之能够在服务或者主机发生故障时起到预防作用;
        自动的日志滚动功能;
        可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等;

Nagios-plugins

nagios-plugins是nagios官方提供的一套插件程序,nagios监控主机的功能其实都是通过执行插件程序来实现的。
        nagios本身并没有监控的功能,所有的监控是由插件完成的,插件将监控的结果返回给nagios,nagios分析这些结果以web的方式展现给我们,同时提供相应的报警功能。
        所有的这些插件是一些实现特定功能的可执行程序,默认安装的路径是/usr/local/nagios/libexec,可以自己查看。

二、工作流程

NRPE

NRPE是一款用来监控被控端主机资源的工具,没有它,nagios将无法对被控端服务器的主机资源进行监控!
    NRPE总共由两部分组成:

check_nrpe 插件,位于在监控主机上
        NRPE daemon,运行在远程的linux主机上(通常就是被监控机)

nagios监控远程linux主机的服务或者资源的一般过程:

1.nagios 会运行 check_nrpe 这个插件,告诉它要检查什么;
        2.check_nrpe 插件会连接到远程的 NRPE daemon ,所用的方式是SSL;
        3.NRPE daemon 会运行相应的 nagios 插件来执行检查;
        4.NRPE daemon 将检查的结果返回给 check_nrpe 插件,插件将其递交给 nagios 做处理。
        Nagios 根据插件返回来的值,来判断监控对象的状态,并通过 web 显示出来,以供管理员及时发现故障。

Nagios可以识别4种状态返回信息:
            0    (OK)        表示状态正常/绿色;
            1    (WARNING)    表示出现警告/黄色;
            2    (CRITICAL)    表示出现非常严重的错误/红色;
            3    (UNKNOWN)    表示未知错误/深黄色。

三、准备环境

Nagios      版本               主机名               IP                      运行服务        
    Server      CentOS 6.7      CenttOS-01      192.168.0.41      Nginx + Php + Nagios + Nagios-plugins + Nrpe
    Client       CentOS 6.7       CenttOS-02      192.168.0.42      Nagios-plugins + Nrpe

四、开始安装
    
    软件版本
        nagios-4.1.1.tar.gz
        nagios-plugins-2.0.3.tar.gz
        nrpe-2.15.tar.gz

Nagios 服务端

1、创建用户
        [root@CentOS-01 ~]# useradd nagios -s /sbin/nologin

2、安装依赖
        [root@CentOS-01 ~]# yum install -y gcc-* glibc glibc-common gd gd-devel openssl-devel httpd-tools unzip \
        perl perl-devel perl-Params-Validate perl-Math-Calc-Units perl-Regexp-Common perl-Class-Accessor perl-Config-Tiny \
        perl-Nagios-Plugin.noarch perl-FCGI* perl-IO*

3、编译安装NAGIOS
        [root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
        [root@CentOS-01 soft]# tar fx nagios-4.1.1.tar.gz
        [root@CentOS-01 soft]# cd nagios-4.1.1
        [root@CentOS-01 nagios-4.1.1]# ./configure --prefix=/usr/local/nagios
        [root@CentOS-01 nagios-4.1.1]# make all
        [root@CentOS-01 nagios-4.1.1]# make install
        [root@CentOS-01 nagios-4.1.1]# make install-init                     ## 安装NAGIOS启动管理脚本
        [root@CentOS-01 nagios-4.1.1]# make install-commandmode            ## NAGIOS 目录赋权
        [root@CentOS-01 nagios-4.1.1]# make install-config                   ## 生成 NAGIOS 所有配置文件
        [root@CentOS-01 nagios]# ls /usr/local/nagios/
        bin  etc  libexec  sbin  share  var

bin            可执行程序目录
            etc            配置文件目录
            libexec      插件所在目录
            sbin          CGI文件所在目录(执行外部命令所需文件)
            share       web 页面文件目录
            var           日志文件、锁文件目录

4、安装插件 nagios-plugins
        [root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
        [root@CentOS-01 soft]# tar fx nagios-plugins-2.0.3.tar.gz
        [root@CentOS-01 soft]# cd nagios-plugins-2.0.3
        [root@CentOS-01 nagios-plugins-2.0.3]# ./configure --prefix=/usr/local/nagios
        [root@CentOS-01 nagios-plugins-2.0.3]# make && make install
        [root@CentOS-01 nagios]# ls /usr/local/nagios/libexec

5、安装组件 NRPE
        [root@CentOS-01 ~]# cd /usr/local/src/nagios/soft/
        [root@CentOS-01 soft]# tar fx nrpe-2.15.tar.gz
        [root@CentOS-01 soft]# cd nrpe-2.15
        [root@CentOS-01 nrpe-2.15]# ./configure --prefix=/usr/local/nagios
        [root@CentOS-01 nrpe-2.15]# make && make install
        [root@CentOS-01 nrpe-2.15]# ls /usr/local/nagios/libexec/check_nrpe
        /usr/local/nagios/libexec/check_nrpe

6、配置 NAGIOS WEB 界面
        [root@CentOS-01 nagios]# cd /usr/local/nginx/conf/
        [root@CentOS-01 conf]# mkdir conf.d
        [root@CentOS-01 conf]# cd conf.d/
        [root@CentOS-01 conf.d]# htpasswd -bc /usr/local/nagios/etc/htpasswd.pwd nagios nagios_test
        [root@CentOS-01 conf.d]# cat nagios.conf
        
        server {
            listen              80;
            server_name     nagios.test.com;
            root            /usr/local/nagios/share/;
            index            index.php index.html;
            access_log          logs/nagios_access.log;
            error_log            logs/nagios_error.log;
            
            ## WEB 访问限制
            auth_basic    "Nagios Access";
            auth_basic_user_file    /usr/local/nagios/etc/htpasswd.pwd;

## 用户访问限制
            location / {
                allow *.*.*.*/24;
                allow *.*.*.0/24;
                deny all;
            }
            
            location ~ \.php$ {
                fastcgi_pass    127.0.0.1:9000;
                fastcgi_index    index.php;
                fastcgi_param  SCRIPT_FILENAME /usr/local/nagios/share$fastcgi_script_name;
                include            fastcgi_params;
            }
            location /nagios {
                alias /usr/local/nagios/share/;
            }
            location /cgi-bin/ {
                alias /usr/local/nagios/sbin/;
            }
            location /stylesheets {
                gzip    off;
                alias   /usr/local/nagios/share/stylesheets;
            }
            location /pub {
                gzip    off;
                alias   /usr/local/nagios/share/docs;
            }
            location ~ .*\.(cgi|pl)?$ {
                gzip            off;
                root            /usr/local/nagios/sbin;
                rewrite            ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
                fastcgi_pass    unix:/usr/local/nagios/perl-fcgi/perl-fcgi.sock;
                fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_index    index.cgi;
                fastcgi_param    REMOTE_USER    $remote_user;
                fastcgi_param    HTTP_ACCEPT_LANGUAGE    zh_CN;
                include            fastcgi_params;
                fastcgi_read_timeout    60;
            }
        }

[root@CentOS-01 conf.d]# service nginxd restart
        [root@CentOS-01 conf.d]# service php-fpm restart

7、更改 NAGIOS WEB 页面布局
        [root@CentOS-01 nagios]# cd /usr/local/src/nagios/soft/
        [root@CentOS-01 soft]# cp vautour_style.zip /usr/local/nagios/share/
        [root@CentOS-01 soft]# cp -r perl-fcgi /usr/local/nagios/
        [root@CentOS-01 soft]# cd /usr/local/nagios/
        [root@CentOS-01 nagios]# mkdir ./sbin/cgi-bin && cp ./sbin/*.cgi ./sbin/cgi-bin/
        [root@CentOS-01 nagios]# cd share/
        [root@CentOS-01 share]# unzip vautour_style.zip
        [root@CentOS-01 share]# service nginxd restart

五、配置监控本机资源
    
    1、NAGIOS 配置文件说明
        [root@CentOS-01 soft]# cd /usr/local/nagios/etc/
        [root@CentOS-01 etc]# ls
        cgi.cfg  htpasswd.pwd  nagios.cfg  objects  resource.cfg

cgi.cfg              控制CGI访问的配置文件
            nagios.cfg        NAGIOS主配置文件
            resource.cfg     NAGIOS资源配置文件,又称变量文件.在该文件中定义变量,以便于其他配置文件调用。
            objects            模板配置文件目录

[root@CentOS-01 etc]# ls objects
        commands.cfg  contacts.cfg  localhost.cfg  printer.cfg  switch.cfg  templates.cfg  timeperiods.cfg  windows.cfg

commands.cfg           命令定义配置文件,其中定义的命令可以被其他配置文件引用
            contacts.cfg              定义联系人和联系人组的配置文件
            localhost.cfg             定义监控本地主机的配置文件
            printer.cfg                定义监控打印机的一个配置文件模板,默认没有启用此文件
            switch.cfg                 定义监控交换机的一个配置文件模板,默认没有启用此文件
            templates.cfg            定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
            timeperiods.cfg         定义Nagios 监控时间段的配置文件
            windows.cfg             监控Windows 主机的一个配置文件模板,默认没有启用此文件

2、配置文件之间的关系
        在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。

成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:

a: 定义监控哪些主机、主机组、服务和服务组;
            b: 定义这个监控要用什么命令实现;
            c: 定义监控的时间段;
            d: 定义主机或服务出现问题时要通知的联系人和联系人组.

为了能更清楚的说明问题,同时也为了维护方便,建议将nagios各个定义对象创建独立的配置文件:

创建hosts.cfg文件来定义主机和主机组
            创建services.cfg文件来定义服务
            用默认的contacts.cfg文件来定义联系人和联系人组
            用默认的commands.cfg文件来定义命令
            用默认的timeperiods.cfg来定义监控时间段
            用默认的templates.cfg文件作为资源引用文件

3、配置监控本机
        [root@CentOS-01 nagios]# cd /usr/local/nagios/etc/objects/
        [root@CentOS-01 objects]# vim templates.cfg
            ###################### 定义邮件联系人 #####################
            ### 定义默认邮件联系人模板
            define contact{
                    name                                generic-contact
                    service_notification_period          24x7
                    host_notification_period             24x7
                    service_notification_options        w,u,c,r
                    host_notification_options           d,u,r
                    service_notification_commands   notify-service-by-email
                    host_notification_commands      notify-host-by-email
                    register                        0
            }
            #########################################################
            # 定义主机模板
            #########################################################
            define host{
                    name                                  generic-host
                    notifications_enabled               1            
                    event_handler_enabled                1            
                    flap_detection_enabled              1            
                    process_perf_data                    1            
                    retain_status_information           1            
                    retain_nonstatus_information         1            
                    check_interval                            1            # 检查时间间隔
                    retry_interval                          2            # 重试检查时间间隔
                    max_check_attempts                  2            # 最大检查次数(发现主机故障时,检查多少次才会通知联系人异常)
                    notification_interval                 30           # 再次发出通知的时间间隔
                    notification_period                  24x7        # 通知时间段
                    notification_options                d,u,r        # 通知选项(d:宕机;u:未知;r:恢复)
                    contact_groups                      admins    # 通知的联系人
                    register                                 0             # DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
            }
            define host{
                    name                                  linux-server
                    use                                 generic-host        ## 引用上边定义的 generic-host 模板
                    check_command                   check-host-alive
                    process_perf_data               1
                    register                               0
            }
            #########################################################
            # 定义服务模板
            #########################################################
            define service{
                    name                                   generic-service
                    active_checks_enabled           1
                    passive_checks_enabled         1
                    parallelize_check                    1
                    obsess_over_service              1
                    check_freshness                   0
                    notifications_enabled             1
                    event_handler_enabled           1
                    flap_detection_enabled           1
                    process_perf_data                 1
                    retain_status_information       1
                    retain_nonstatus_information   1
                    is_volatile                               0
                    check_period                         24x7
                    max_check_attempts              2
                    normal_check_interval            1
                    retry_check_interval               2
                    contact_groups                     admins
                    notification_options               w,u,c,r
                    notification_interval               360
                    notification_period                 24x7
                    register                                0
            }
            ####################################################
            ## 针对不同部门制定不同模板策略
            ####################################################

### 定义'DSP'组监控策略
            define service {
                    name                        generic-service-dsp
                    use                           generic-service         ## 引用上边定义的 generic-service 模板
                    contact_groups          admins,adminsdsp
                    process_perf_data      1
                    register                      0
            }

####################################################
            # 定义本机资源模板
            ####################################################
            define service {
                    name                                 generic-load-service
                    use                                   generic-service
                    service_description             Current Load
                    check_command                 check_nrpe!check_load
                    register                             0
            }
            define service {
                    name                                generic-mem-service
                    use                                   generic-service
                    service_description             MEM Useage
                    check_command                 check_nrpe!check_mem
                    register                             0
            }
            define service {
                    name                                generic-swap-service
                    use                                   generic-service
                    service_description             Swap Useage
                    check_command                 check_nrpe!check_swap
                    register                             0
            }
            define service {
                    name                                generic-disk-service
                    use                                   generic-service
                    service_description             Disk Partition
                    check_command                 check_nrpe!check_disk
                    register                             0
            }

define service {
                    name                                generic-iostat-service
                    use                                   generic-service
                    service_description             Disk Iostat
                    check_command                 check_nrpe!check_iostat
                    register                             0
            }

[root@CentOS-01 objects]# vim contacts.cfg
            ##################################################
            ###                          ******* 定义联系人 ******* 
            ##################################################

### Default
            define contact{
                    contact_name            nagiosadmin
                    use                           generic-contact        ## 引用 templates.cfg 中定义的 generic-contact 模板
                    alias                          Nagios Admin
                    email                         yw@dianru.com
                    }
            ##################################################
            ### 定义不同组邮件联系人
            ##################################################
            ### OPS
            define contact{
                    contact_name            nagios-ops
                    use                           generic-contact
                    alias                          Ops
                    email                         yw@dianru.com         ## 定义联系人邮箱,多个逗号分隔.
                    }

#############################################
            ###               ******* 定义联系人组 *******
            #############################################

############### 定义默认邮件联系人组 ################

### Defalut Contactgroup ###
            define contactgroup{
                    contactgroup_name       admins
                    alias                             Nagios Administrators
                    members                      nagiosadmin
                    }

############### 定义不同组邮件联系人组 ###############

### OPS
            define contactgroup{
                    contactgroup_name       adminsops
                    alias                        OpsGroups
                    members                       nagios-ops
                    }

[root@CentOS-01 objects]# vim hosts.cfg
            #########################################
            # HOST DEFINITION
            #########################################
            ###定义本机策略

#host:CentOS-01 |ip:192.168.101.181 |group:localhost
            define host {
                    use                 linux-server                  ## 引用 templates.cfg 中定义的 linux-server 模板
                    host_name         CentOS-01                    ## 主机名(随意)
                    alias               192.168.101.181           ## 别名(随意)
                    address             192.168.101.181           ## IP地址
                    contact_groups  admins                          ## 联系人组名. 引用 contacts.cfg 中定义的默认联系人组
            }

define hostgroup {
                    hostgroup_name  localhost
                    alias                 localhost
                    members         CentOS-01                    ## 要跟 host_name 一致
            }

[root@CentOS-01 objects]# mkdir /usr/local/nagios/services/192.168.101.181 -p
        [root@CentOS-01 objects]# cd /usr/local/nagios/services/192.168.101.181
        [root@CentOS-01 192.168.101.181]# ls
        disk.cfg  iostat.cfg  load.cfg  mem.cfg  swap.cfg

[root@CentOS-01 192.168.101.181]# cat disk.cfg
            ####################################
            # SERVICE DEFINITION
            ####################################

define service {
                use               generic-disk-service        ## 引用 templates.cfg 中定义的 generic-disk-service 模板
                host_name    CentOS-01                    ## 要跟 hosts.cfg 中定义的 host_name 一致
            }
        [root@CentOS-01 192.168.101.181]# cat iostat.cfg
            ####################################
            # SERVICE DEFINITION
            ####################################

define service {
                use               generic-iostat-service      ## 引用 templates.cfg 中定义的 generic-iostat-service 模板
                host_name    CentOS-01                    ## 要跟 hosts.cfg 中定义的 host_name 一致
            }
        [root@CentOS-01 192.168.101.181]# cat load.cfg
            ####################################
            # SERVICE DEFINITION
            ####################################

define service {
                use               generic-load-service       ## 引用 templates.cfg 中定义的 generic-load-service 模板
                host_name    CentOS-01                    ## 要跟 hosts.cfg 中定义的 host_name 一致
            }
        [root@CentOS-01 192.168.101.181]# cat mem.cfg
            ###################################
            # SERVICE DEFINITION
            ###################################

define service {
                use               generic-mem-service       ## 引用 templates.cfg 中定义的 generic-mem-service 模板
                host_name    CentOS-01                    ## 要跟 hosts.cfg 中定义的 host_name 一致
            }
        [root@CentOS-01 192.168.101.181]# cat swap.cfg
            ##################################
            # SERVICE DEFINITION
            ##################################
            define service {
                use               generic-swap-service      ## 引用 templates.cfg 中定义的 generic-swap-service 模板
                host_name    CentOS-01                    ## 要跟 hosts.cfg 中定义的 host_name 一致
            }
        [root@CentOS-01 192.168.101.181]# cd /usr/local/nagios/etc/objects
        [root@CentOS-01 objects]# vim ../nagios.cfg
            .......
            cfg_file=/usr/local/nagios/etc/objects/commands.cfg
            cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
            cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
            cfg_file=/usr/local/nagios/etc/objects/templates.cfg
            cfg_file=/usr/local/nagios/etc/objects/hosts.cfg             
            cfg_dir=/usr/local/nagios/services/192.168.101.181
            .......

vim /usr/local/nagios/etc/nrpe.cfg
            log_facility=daemon
            pid_file=/var/run/nrpe.pid
            server_port=5666
            nrpe_user=nagios
            nrpe_group=nagios
            allowed_hosts=192.168.101.181
            dont_blame_nrpe=0
            debug=0
            command_timeout=60
            connection_timeout=300
            command[check_load]=/usr/local/nagios/libexec/check_load -w 12,8,5 -c 25,20,15
            command[check_mem]=/usr/local/nagios/libexec/check_memory -w 10% -c 3%
            command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
            command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 10 -c 15
            command[check_disk]=/usr/local/nagios/libexec/check_disk.sh

[root@CentOS-01 nagios]# cp check_disk.sh check_memory check_iostat /usr/local/nagios/libexec/
        [root@CentOS-01 nagios]# chmod 755 /usr/local/nagios/libexec/{check_disk.sh,check_memory,check_iostat}
        [root@CentOS-01 nagios]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
        [root@CentOS-01 nagios]# service nagios restart

CentOS 6.7 安装配置 nagios的更多相关文章

  1. CentOS 7.0安装配置Vsftp服务器

    一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  2. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: CentOS 6.6系统安装配置图解教程 http://www.osyunwei.com/archives/8398.html 1.配置防火墙,开启80端口.3306端口 vi /etc/s ...

  3. CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)

    CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL) 一.准备篇: /etc/init.d/iptables stop #关闭防火墙 关闭SELINUX vi /etc/sel ...

  4. CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)

    这篇文章主要介绍了CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)的方法,需要的朋友可以参考下 文章写的不错,很详细:IDO转载自网络: 准备篇: 1.配置防火墙,开启 ...

  5. centOS下yum安装配置samba

     centOS下yum安装配置samba 2010-03-29 15:46:00 标签:samba yum centOS 安装 休闲 注意:本文的原则是只将文件共享应用于内网服务器,并让将要被共享的目 ...

  6. CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  7. CentOS 7.x安装配置

    简述 VMware可以创建多个虚拟机,每个虚拟机上都可以安装各种类型的操作系统.安装方法也有很多种.下面,主要以ISO镜像安装为例,介绍CentOS 7.x的安装过程及相关的参数设置. 简述 创建虚拟 ...

  8. CentOS 6.x安装配置

    简述 VMware可以创建多个虚拟机,每个虚拟机上都可以安装各种类型的操作系统.安装方法也有很多种.下面,主要以ISO镜像安装为例,介绍CentOS 6.x的安装过程及相关的参数设置. 简述 创建虚拟 ...

  9. CentOS 6.3安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp -- ...

随机推荐

  1. 多线程之Thread类

    Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...

  2. 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求:

    (1) Point2D有两个整型成员变量x, y (分别为二维空间的X,Y方向坐标),Point2D的构造方法要实现对其成员变量x, y的初始化. (2)Point2D有一个void型成员方法offs ...

  3. Spring整合MyBatis(四)MapperFactoryBean 的创建

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 目录 一.MapperFactoryBean的初始化 二.获取 Map ...

  4. Spring源码分析(十二)FactoryBean的使用

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 一般情况下,Spring通过反射机制利用bean的class属性指定实现 ...

  5. 浅谈基于FormsAuthentication的认证

    一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否 ...

  6. OpenJudge 4001:抓住那头牛

    题目链接 题解: 这个题可以用广搜来解决,从农夫到牛的走法每次都有三种选择,定义一个队列,把农夫的节点加进队列,然后以这三种走法找牛,队列先进先出,按顺序直到找到牛的位置. 代码: #include& ...

  7. SuperObject Delphi 的 JSON 属性乱序 - 操作类改造 - 关于属性顺序的问题

    Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. ...

  8. uip.h 笔记

    想了解uip,可以从uip.h开始,他对主体函数有详细的说明,和案例 初始化 1 设定IP网络设定 2 初始化uip 3 处理接收包 4 ARP包处理 5 周期处理,tcp协议处理 uip_proce ...

  9. lua协程实现

    协程是个很好的东西,它能做的事情与线程相似,区别在于:协程是使用者可控的,有API给使用者来暂停和继续执行,而线程由操作系统内核控制:另外,协程也更加轻量级.这样,在遇到某些可能阻塞的操作时,可以使用 ...

  10. C# 用QQ企业邮箱发邮件

    问题System.Net.Mail下的SmtpClient来发送邮件,而System.Net.Mail only仅支持Explicit SSL 不要465端口,用25,不用EnableSsl = tr ...