MAC地址记录与重复检测系统

摘要:
这套MAC地址记录和重复检测系统已经通过KK级出货验证,很难逃脱。3.编写客户端程序,上传MAC进行比较,并将结果显示给生产线员工。当然,为了更好地跟踪重复的MAC模块,您可以上传检测时间和计算机编号。

一、通信模块如WiFi、Zigbee都会有唯一的MAC地址,这些模块在出厂前需要一套系统来确保唯一性。

此套MAC地址记录与重复检测系统已经经过KK级的出货验证,难有漏网之鱼。

二、系统设计思路:

客户端程序读取模块MAC地址,然后去pass数据库中寻找是否已经存在,如果不存在,则将此MAC存到pass数据库中,显示PASS,如果已经存在,证明已经生产过了,有重复,则将此MAC存到repeat数据库中。

 

三、系统实施步骤:

1,搭建一台windows2003服务器,外接交换机,通过网线与产线上几十台电脑相连。

2,在服务器上安装mysql服务端和mysql客户端程序,用mysql客户端先建立两个数据库:pass数据库、repeat数据库。

3,编写客户端程序,上传MAC作对比,显示结果给产线员工。

当然为了更好的追踪MAC重复的模块,可以上传检测时间、电脑编号。

四、给出mysql代码片段:

void SendMactoServer(char *SendMac)
{
//*******************************************************************************
char  szSqlText[500] ;    

MYSQL *conn;    
MYSQL_RES *rs;    
MYSQL_ROW row;    //注意它的声明 typedef char**MYSQL_ROW,字符串数组    

conn = mysql_init(NULL);    
if (conn == NULL)    
{    
fprintf(stderr, "mysql_init() failed (probably out of memory) " );   
exit(1);    
}    

if  (mysql_real_connect(conn,host_name,user_name,password,    
MacDbName,MYSQL_PORT,NULL,0) == NULL)    
{    
//在MYSQL初始化之后的操作如果有错误,可以用mysql_errno(MYSQL*)和    
//mysql_errer(MYSQL*) 分别获得出错代号和描述    
fprintf(stderr, "mysql_real_connect() failed: Error %u (%s) " ,   
mysql_errno(conn),mysql_error(conn));    
exit(1);    
}    

printf( "connect to %s 数据库 successful. ",MacDbName);  

//*******************************************************************************

char MysqlCmd[64];
sprintf(MysqlCmd,"select value from %s where value ='AA:BB:AA:DD:CC:FF'",MacDbName);

int MacDbNameLen = strlen(MacDbName);

    int k;
    for(k=0;k<17;k++)
    {
        MysqlCmd[33+MacDbNameLen+k]=*(SendMac+k);
    }

sprintf(szSqlText, MysqlCmd );
printf("szSqlText = %s ",szSqlText);
//********************************************************************************

//执行成功则返回零    
if  (mysql_query(conn,szSqlText) != 0)
{    
    mysql_close(conn);   

    if(DEBUG)
        printf(" select value from %s where value ='AA:BB:AA:DD:CC:FF' return 0 ",MacDbName);

    while(1);  
}    
else  {    
//立即从服务器返回所有行,存储到本地,产生结果集,失败则返回NULL    
rs = mysql_store_result(conn);    

//结果集是保留在服务器上,fetch_row时才逐行从服务器上取    
//rs = mysql_use_result(conn);    
//Get query result.    
int count = ( int )mysql_num_rows(rs);    

while ((row = mysql_fetch_row(rs)) != NULL){   //返回NULL,则说明不再有行    

                    if(!strcmp(SendMac,row[0]))
                        {
                                        wColor=SetConsoleColor(FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE);
                            printf("*************************************************** ");
                            printf("*******MAC  地址检测:  重复  重复  重复  重复  重复 ");
                            printf("*************************************************** ");
                            ResetConsoleColor(wColor);

                            SendRepeatMactoServer(SendMac);

                            while(1);
                            exit(1);
                            
                        }
                    else continue;

//}    
fputc(' ',stdout);    
}   

void SendRepeatMactoServer(char *SendMac)
{
//*******************************************************************************
char  szSqlText[500] ;    

MYSQL *conn;    
MYSQL_RES *rs;    
MYSQL_ROW row;    //注意它的声明 typedef char**MYSQL_ROW,字符串数组    

conn = mysql_init(NULL);    
if (conn == NULL)    
{    
fprintf(stderr, "mysql_init() failed (probably out of memory) " );   
exit(1);    
}    

if  (mysql_real_connect(conn,host_name,user_name,password,    
repeat_db_name,MYSQL_PORT,NULL,0) == NULL)    
{    
//在MYSQL初始化之后的操作如果有错误,可以用mysql_errno(MYSQL*)和    
//mysql_errer(MYSQL*) 分别获得出错代号和描述    
fprintf(stderr, "mysql_real_connect() failed: Error %u (%s) " ,   
mysql_errno(conn),mysql_error(conn));    
while(1);
exit(1);    
}    

printf( "connect to repeat db successful. " );  

//*****************************************************************************************************
GetLocalTime( &sys );
sprintf(date,"%4d-%02d-%02d %02d:%02d:%02d ",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond);

sprintf(szSqlText, "insert into repeatmac values ('%s','%s','%s')",SendMac,PcNum,date);   
printf("待上传重复MAC值:%s ",SendMac);

if  (mysql_query(conn,szSqlText)) {    
printf( "上传数据库 error: Error %u (%s) " ,    
mysql_errno(conn),mysql_error(conn));    
mysql_close(conn);    
while(1);
exit(1);

}    
else {    
//insert/delete/update 语句可用mysql-affected_rows()得到受作用的行    
//printf( "INSERT statement succeeded: %lu rows affected " ,   
//(unsigned  long )mysql_affected_rows(conn));    
    printf("重复MAC上传数据库 OK ! ");
}   

//*****************************************************************************************************
}

免责声明:文章转载自《MAC地址记录与重复检测系统》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dva 路由跳转Qt设置窗体背景渐变下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac OS 安装mysqlcliet 失败问题解决

简单记录 Mac OS pip 安装mysqlclient报错处理过程 系统: python: Python 3.8.2 虚拟环境 直接安装 mysqlclient 会报错 Using cached https://files.pythonhosted.org/packages/f4/f1/3bb6f64ca7a429729413e6556b7ba5976...

MySql数据库优化、备份和恢复

一、数据库优化 1、为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 优化原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。 2、数据库结构优化 需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的内容。 将...

解决阿里云数据库RDS报错The table '/home/mysql/data3015/tmp/#sql_13975_23' is full

查询任何一条语句都显示 The table '/home/mysql/data3015/tmp/#sql_13975_23' is full 查看了下数据库利用磁盘空间没有满, 阿里云的处理方式: 1. 出现这个错误信息的原因 在SQL查询进行 group by、order by、distinct、union、多表更新、group_concat、count...

linux入门系列19--数据库管理系统(DBMS)之MariaDB

前面讲完Linux下一系列服务的配置和使用之后,本文简单介绍一款数据库管理系统(MySQL的兄弟)MariaDB。 如果你有MySQL或其他数据的使用经验,MariaDB使用起来将非常轻松。 本文讲解Centos7默认的数据MariaDB,由于是入门系列文章因此不会深入讲解,后面有机会在单独深入。 一、MariaDB产生背景 数据处理是软件的核心,软件的本...

Mac下如何配置环境变量

前不久,在玩 flutter 的时候,按照官方教程设置环境变量总是不起作用,一番搜索之后,才找到原因,并成功设置 flutter 的环境变量,于是记录一下 Mac 下如何配置环境变量。 一、个人推荐:分模块创建 1、分模块创建 个人推荐使用分模块创建环境变量,具体使用方式如下(以设置 flutter 环境变量为例): (1)、创建文件 在终端中键入以下命令...

MySQL 千万 级数据量根据(索引)优化 查询 速度

一、索引的作用索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让人难以忍受了。 提升查询速度的方向一是提升硬件(内存、cpu、硬盘),二是在软件上优化(加索引、优化sql;优化sql不在本文阐述范围之内)。 能在软件上解决的...