| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1634 人关注过本帖, 1 人收藏
标题:获取本机MAC--小鱼儿无聊之作
取消只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏(1)
 问题点数:0 回复次数:4 
获取本机MAC--小鱼儿无聊之作
昨天无聊就想想写一些网络程序。
本想写一一个聊天工具,但发现没有c+sdk的聊天代码。
大多数都是MFC的,(主要是自己不懂多线程和Winsock I/O 异步模型,现在还在学习中)。现在不是很喜欢MFC所以就胡乱的翻开自己的电子书。
看到一个获取MAC源程序。
不过不幸的也是MFC。由于代码比较简单我就改成为sdk+c模式的。
不过很悲剧的时候,几乎一样的代码出先错误。(原来没有添加头,和动态库(库还是自己在目录下自己找的,随便一猜尽然猜对了。))
但改了后,发现尽然不能获取的自己MAC地址。
我勒个去,一模一样的代码啊。。于是百度,百了好久,发现和我一样的问题。他和他书上一模样的代码也得不出来。
他的也没有结果,但我还不死心继续百度,结果我还是没有找到。于是我彻底失望了。无聊翻着自己电子书。竟然我看到有关Netbios的一些协议的内容,
原来自己每一个网卡都一个Lana编码。书上说0~9。但我发现实际是0~8。如是我自己验证,果然是这样的,我太聪明了。嘻嘻。。。。
可能是那本书太老了,是xp以前的系统吧。。。
基本代码
GetMac.h
#include <WINDOWS.H>

void GetMac();//获得物理地址


GetMac.cpp
程序代码:
#include "StdAfx.h"

#include <nb30.h>

#pragma comment(lib,"NETAPI32.LIB")


void GetMac()
{
    char strMac[256];
    int ret;
    int i=0;
    char mac[1024];
    char buf[256];
    NCB ncb;
    ADAPTER_STATUS adapt;
    memset(buf,0,sizeof(buf));
    memset(mac,0,sizeof(mac));
    memset(&ncb,0,sizeof(ncb));
    for(i=0;i<8;i++)
    {
     ncb.ncb_command=NCBRESET;//发送命令进行初始化
     ncb.ncb_lana_num=i;
      ret=Netbios(&ncb);
      //sprintf(buf,"ret is %x",ret);
//      MessageBox(0,buf,0,0);
    //发送ncbastat获取网卡信息
    if(0!=ret)
    {
        continue;
    }
    //MessageBox(0,buf,0,0);
    ncb.ncb_command=NCBASTAT;
    ncb.ncb_lana_num=i;
    strcpy((char *)ncb.ncb_callname,"*");
    ncb.ncb_buffer=(unsigned char *)&adapt;
    ncb.ncb_length=sizeof(adapt);
    //这里都要填对应
    Netbios(&ncb);
    if(adapt.adapter_type==0XFF)
    {
        strcat(mac,"Token Ring adapter ");
    }
    else
        if(adapt.adapter_type==0XFE)
        {
            strcat(mac," Ethernet  adapter ");
        }
         sprintf(strMac,"%d MAC 地址是:%02X%02X-%02X%02X-%02X%02X\r\n",
                              i,
         adapt.adapter_address[0],
         adapt.adapter_address[1],
         adapt.adapter_address[2], 
         adapt.adapter_address[3],
         adapt.adapter_address[4],
         adapt.adapter_address[5]);
     strcat(mac,strMac);
    }
    MessageBox(0,mac,0,0);
}

运行程序
小鱼儿获得MAC.zip (30.96 KB)
搜索更多相关主题的帖子: 聊天工具 模型 电子书 多线程 源程序 
2011-12-11 12:45
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
q求聊天c+sdk 聊天程序 源代码。。

用心做一件事情就这么简单
2011-12-11 12:47
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用waterstar在2011-12-11 18:59:06的发言:

小鱼儿兄真勤奋啊。
人笨撒。 嘿嘿。。
其实发现自己也很贪玩啊。

用心做一件事情就这么简单
2011-12-12 01:00
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用smallmoon521在2011-12-11 22:36:37的发言:

C+SDK的也不难找吧?
TCP UDP都有
bind
listen
accept
recv
send
搜下这几个函数,应该能找到的
主要是阻塞的问题。。。。
嘿嘿,其实还是很简单。
---------

用心做一件事情就这么简单
2011-12-12 01:01
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用hahayezhe在2011-12-12 11:26:11的发言:

我有  阻塞的 客户端 服务端 SDK写的.
阻塞的,其实现在也不需要了。。
自己学了多线程和select模式 了解一点了。自己写应该没有问题了。


你发给我也好,学习一下。嘻嘻。。。

用心做一件事情就这么简单
2011-12-12 12:41
快速回复:获取本机MAC--小鱼儿无聊之作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.141585 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved