⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20010312002.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
            0Fh : 名字具有活动会话,现被撤消登记<br>

            11h : NetBIOS 本地会话表满了<br>

            12h : 没有挂起的Listen 命令,所有拒绝断开会话<br>

            13h : 非法名字编号<br>

            14h : 不能找到被调用名字或无回答<br>

            15h : 找不到命令,或不能把*号或00h指定ncb_name的首字节,或名字已被撤消而不能再使用<br>

            17h : 名字已被删除18h : 会话非正常结束<br>

            19h : 检测到名字冲突<br>

            1Ah : 不兼容的远程设备<br>

            21h : 接口忙<br>

            22h : 挂起的命令太多<br>

            23h : 在ncb_lana_num域中无效的编号<br>

            24h : 产生取消时,命令已完成<br>

            25h : 字节组名命令指定了保留名字<br>

            26h : 命令不能被撤消<br>

            30h : 被另一个进程定义了名字<br>

            34h : NetBIOS环境未被定义<br>

            35h : 所用的操作系统资源用尽<br>

            36h : 超出最大应用个数<br>

            37h : NetBIOS无可以使用的SAP<br>

            38h : 无可以使用的请求资源<br>

            40h : 系统错误<br>

            41h : 检测到远程适配器的热载波<br>

            42h : 检测到本地适配器的热载波<br>

            43h : 未检测到载波<br>

            4Eh : 状态位12、14、或15被置位的时间超过 1 min<br>

            4Fh : 状态位8--11中的一个或多个被置位<br>

            50h--F6h: 适配器发生故障<br>

            F7h : 隐式DIR-INITIALIZE错误<br>

            F8h : 隐式DIR-OPEN-ADAPTER 错误<br>

            F9h : IBM LAN支持程序内部错误<br>

            FAh : 适配器检查<br>

            FBh : NetBIOS 程序未被装入PC<br>

            FCh : DIR-OPEN-ADAPTER 或 DIR-OPEN-SAP失败<br>

            FDh : 不期望关闭适配器<br>

            FFh : 命令挂起状态<br>

            <br>

            为了更好地解说NetBIOS 的编程,现设计一个用 NetBIOS 来编写获取网络适配器信息的程序<br>

            <br>

            二、创建程序例子<br>

            <br>

              在C++Builder 5.0 中选择File / New ,打开“New Items”对话框,在对框中选择Consol Wizard.随后弹出“Consol 

            Application Wizard”对话框,在Windows Type 中选择Consol,在ExecutionType中选择EXE,然后选择Finish,生成一个新的控制台应用程序。<br>

            <br>

            //“Project1.cpp”源代码如下:<br>

            #pragma hdrstop<br>

            #include &lt;;condefs.h&gt;;<br>

            #include &lt;;windows.h&gt;;<br>

            #include &lt;;stdio.h&gt;;typedef struct _ASTAT<br>

            {<br>

            ADAPTER_STATUS adapt;<br>

            NAME_BUFFER NameBuffer[30];<br>

            } ASTAT, *PASTAT;ASTAT Adapter;//自定义复位适配器函数<br>

            bool ClearAdapter(NCB ncb);<br>

            //---------------------------------------------------------------------------<br>

            //#pragma argsused<br>

            int main()<br>

            {<br>

            NCB ncb;<br>

            UCHAR uRetCode;//先复位网络适配器ClearAdapter(ncb);memset(&amp;;ncb,0,sizeof(ncb));//命令码为显示适配器状态<br>

            ncb.ncb_command=NCBASTAT;<br>

            ncb.ncb_lana_num=0;<br>

            strcpy((char *)ncb.ncb_callname,"* ");<br>

            ncb.ncb_buffer=(unsigned char *) &amp;;Adapter;<br>

            ncb.ncb_length=sizeof(Adapter);<br>

            uRetCode=Netbios(&amp;;ncb);<br>

            printf("The NCBASTAT returned code is OX%x\n",uRetCode);if(uRetCode==0)<br>

            {<br>

            printf( "The Ethernet Number is: %02x_%02x_%02x_%02x_%02x_%02x\n",<br>

            Adapter.adapt.adapter_address[0],<br>

            Adapter.adapt.adapter_address[1],<br>

            Adapter.adapt.adapter_address[2],<br>

            Adapter.adapt.adapter_address[3],<br>

            Adapter.adapt.adapter_address[4],<br>

            Adapter.adapt.adapter_address[5] );<br>

            if(Adapter.adapt.adapter_type==0xFF)<br>

            printf("The adapter is Token Ring adapter.\n");<br>

            else if(Adapter.adapt.adapter_type==0xFE)<br>

            printf("The adapter is Ethernet adapter.\n");printf("The software-release 

            level is %d.%d\n",Adapter.adapt.rev_major,Adapter.adapt.rev_minor);<br>

            printf("The number of names in the local names table is %d\n",Adapter.adapt.name_count);<br>

            for(int i=0;i&lt;;Adapter.adapt.name_count;i++)<br>

            printf("%s\n",Adapter.NameBuffer[i].name);<br>

            }//注意下面程序代码故意出错误<br>

            char Remote[16]="202.112.87.221";//先复位网络适配器<br>

            ClearAdapter(ncb);<br>

            memset(&amp;;ncb,0,sizeof(ncb));//命令码为发送数据<br>

            ncb.ncb_command=NCBSEND;<br>

            ncb.ncb_lana_num=0;<br>

            ncb.ncb_lsn=4;<br>

            ncb.ncb_sto=2;<br>

            strcpy(ncb.ncb_callname,Remote);<br>

            //strcpy((char *)ncb.ncb_callname,"* ");<br>

            ncb.ncb_buffer=(unsigned char *) &amp;;Adapter;<br>

            ncb.ncb_length=sizeof(Adapter);<br>

            uRetCode=Netbios(&amp;;ncb);<br>

            printf("The NCBASTAT returned code is OX%x\n",uRetCode);<br>

            printf("The number of FRMR frames received is %d\n",Adapter.adapt.frmr_recv);<br>

            printf("The number of FRMR frames transmitted is %d\n",Adapter.adapt.frmr_xmit);getchar();<br>

            return 0;<br>

            }<br>

            //---------------------------------------------------------------------------<br>

            //复位网络适配器 bool ClearAdapter(NCB ncb)<br>

            {<br>

            memset(&amp;;ncb,0,sizeof(ncb));<br>

            ncb.ncb_command=NCBRESET;<br>

            ncb.ncb_lana_num=0;<br>

            Netbios(&amp;;ncb);<br>

            return true;<br>

            }<br>

            <br>

            以上实例利用网络基本输入/输出系统NetBIOS创建了一个能获取主机 MAC (网络适配器)信息及其他一些信息的应用程序。由于作者水平有限,有不当之处请凉解。本文希望能起到抛砖引玉的作用。 

          </div>

        </div>

                                                    </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -