第3章基于NetBIOS的网络编程课件.ppt

上传人(卖家):晟晟文业 文档编号:4382972 上传时间:2022-12-04 格式:PPT 页数:35 大小:173KB
下载 相关 举报
第3章基于NetBIOS的网络编程课件.ppt_第1页
第1页 / 共35页
第3章基于NetBIOS的网络编程课件.ppt_第2页
第2页 / 共35页
第3章基于NetBIOS的网络编程课件.ppt_第3页
第3页 / 共35页
第3章基于NetBIOS的网络编程课件.ppt_第4页
第4页 / 共35页
第3章基于NetBIOS的网络编程课件.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、WindowsWindows网络编程技术网络编程技术第第3 3章基于章基于NetBIOSNetBIOS的网的网络编程络编程授课老师:胡鸣授课老师:胡鸣数学与计算机学院数学与计算机学院计算机系计算机系本章提纲本章提纲3.1 3.1 基于基于NetBIOSNetBIOS网络编程的基础网络编程的基础3.1.13.1.1网络应用实例和来源网络应用实例和来源3.1.2NetBIOS3.1.2NetBIOS提供的接口与服务提供的接口与服务3.1.33.1.3网络控制块网络控制块NCBNCB的应用的应用3.2 3.2 数据报通信编程数据报通信编程3.2.13.2.1数据报通信应用模型数据报通信应用模型3.2

2、.23.2.2实例中的广播式数据报通信算法与实现实例中的广播式数据报通信算法与实现3.2.33.2.3实例中的定向型数据报通信的算法与实现实例中的定向型数据报通信的算法与实现3.3 3.3 会话通信编程会话通信编程3.3.13.3.1会话通信应用模型会话通信应用模型3.3.23.3.2实例中会话服务器的算法与实现实例中会话服务器的算法与实现3.3.33.3.3实例中会话客户算法与实现实例中会话客户算法与实现3.1.13.1.1网络应用实例和来源网络应用实例和来源 VC+VC+实现的控制台程序,位于实现的控制台程序,位于“第第3 3章代码章代码”中,其源程序代码由中,其源程序代码由cnetbio

3、s.hcnetbios.h和和CnetbiosChat.cppCnetbiosChat.cpp两部分组成两部分组成 两个界面:初始界面和功能操作界面两个界面:初始界面和功能操作界面 程序使用命令提示符程序使用命令提示符$,界面上可以提供用户操,界面上可以提供用户操作的命令有五种作的命令有五种 :LookupLookup(了解本地命名和(了解本地命名和适配器信息)、适配器信息)、sessionsession(会话建立与通信)、(会话建立与通信)、sendtonamesendtoname(发送单播和组播数据包)、(发送单播和组播数据包)、sendtoallsendtoall(发送广播通信)、(发送

4、广播通信)、exit exit(退出)(退出)键入非命令字符串,则提示键入非命令字符串,则提示初始界面初始界面功能操作界面功能操作界面LookupLookupsessionsession会话服务器会话服务器 会话客户会话客户 sendtonamesendtonamesendtoallsendtoall3.1.2NetBIOS3.1.2NetBIOS提供的接口与服务提供的接口与服务 网络基本输入网络基本输入/输出系统输出系统NetBIOSNetBIOS(Network Network Basic Input/Output SystemBasic Input/Output System)在支持三个

5、)在支持三个传输协议(传输协议(NetBEUINetBEUI、TCP/IPTCP/IP和和IPX/SPX IPX/SPX)的基础上提供了标准接口;的基础上提供了标准接口;应用程序通过引用网络控制块应用程序通过引用网络控制块NCBNCB(Network Network Control BlockControl Block)作为参数调用函数:)作为参数调用函数:UCHAR Netbios(PNCB pNCB)UCHAR Netbios(PNCB pNCB);NetBIOSNetBIOS支持的服务支持的服务 :网络名字注册和验证:网络名字注册和验证 、会话服务、无连接的数据报服务、协议和适配器会话服

6、务、无连接的数据报服务、协议和适配器的监视与管理、支持三种软件调用的监视与管理、支持三种软件调用NetbiosNetbios函函数:同步、异步和回调数:同步、异步和回调 NBFNetBIOS Frames,NetBEUINBFNetBIOS Frames,NetBEUI(NetBIOS NetBIOS Extended User Interface Extended User Interface)协议,)协议,IBMIBM和和MicrosoftMicrosoft为小型局域网建立的不可路由协议,不适合为小型局域网建立的不可路由协议,不适合广域网。广域网。针对针对TCP/IPTCP/IP也称也称N

7、BT(NetBIOS over TCP/IP)NBT(NetBIOS over TCP/IP)IPX(Internetwork Packet Exchange)/SPX IPX(Internetwork Packet Exchange)/SPX Sequences Packet Exchange(Sequences Packet Exchange(顺序包交换顺序包交换)Novell NetWareNovell NetWare操作系统使用的网络层协议,路由协操作系统使用的网络层协议,路由协议没有议没有IPIP丰富,设置简单。但丰富,设置简单。但IPXIPX协议在以太网上运行时协议在以太网上运行时

8、必须指定封装形式。必须指定封装形式。TDI TDI(Transport Driver InterfaceTransport Driver Interface)传输驱动接口)传输驱动接口函数函数Netbios(PNCB pNCB)Netbios(PNCB pNCB)#define NetbiosInt5c(unsigned char)0 x5C)#define NetbiosInt2AFunctionCode(unsigned char)0 x2A)void Netbios(struct NCB*NcbPtrNear)Union REGS InRegs,OutRegs;struct NCB fa

9、r*NcbPtrFar=(struct NCB*far)NcbPtrNear;segread(&SegRegs);SegRegs.es=FP_SEG(NcbPtrFar);SegRegs.x.bx=FP_OFF(NcbPtrFar);Int86x(NetbiosInt5c,&InRegs,&OutRegs,&SegRegs);网络名字注册和验证网络名字注册和验证 名字解析系统有名字解析系统有LMHOSTS LMHOSTS 文件和文件和WINS WINS(Windows Internet Name Service)(Windows Internet Name Service)服务器两服务器两个选

10、项个选项 类型有唯一名,组名,永久节点名(网卡地址),符类型有唯一名,组名,永久节点名(网卡地址),符号名。号名。为每个为每个LANALANA编号维护一个命名表编号维护一个命名表 ,名字(最多,名字(最多1616个字节)与一个字节的命名编号(个字节)与一个字节的命名编号(1-2541-254)对应)对应 LANALANA编号编号 描述网卡和传输协议(描述网卡和传输协议(3 3个),例如两个个),例如两个网卡以及三种协议网卡以及三种协议 0 0(TCP/IPTCP/IP,网卡,网卡1 1)、)、1 1(NetBEUINetBEUI,网卡,网卡1 1)、)、2 2(IPX/SPXIPX/SPX,网

11、卡,网卡1 1)、)、3 3(TCP/IPTCP/IP,网卡,网卡2 2)、)、4 4(NetBEUINetBEUI,网卡,网卡2 2)、)、5 5(IPX/SPXIPX/SPX,网卡,网卡2 2)会话服务会话服务 呼叫功能用于建立一条与被呼叫的应用进程之呼叫功能用于建立一条与被呼叫的应用进程之间的会话连接间的会话连接 一旦连接建立,就某个一旦连接建立,就某个LANALANA编号有了一条虚编号有了一条虚电路用电路用NetBIOSNetBIOS本地会话号(本地会话号(1-2541-254,0 0和和255255作为系统保留值)来识别。作为系统保留值)来识别。会话数据发送和接收都是基于所建立的虚电

12、路,会话数据发送和接收都是基于所建立的虚电路,因此除了指定收发缓冲区的指针和缓冲区的长因此除了指定收发缓冲区的指针和缓冲区的长度外,还需要指定的本地会话号和度外,还需要指定的本地会话号和LANALANA编号。编号。通信结束释放已有连接,同时释放进程占用的通信结束释放已有连接,同时释放进程占用的内存单元,即本地会话号对应的表。内存单元,即本地会话号对应的表。无连接的数据报服务无连接的数据报服务 NetBIOSNetBIOS提供单播、组播和广播三种数据报提供单播、组播和广播三种数据报传送功能传送功能 NetBIOSNetBIOS单播和组播信息发送都是基于名字,单播和组播信息发送都是基于名字,因此单

13、播与组播的区分取决于接收方的名字是因此单播与组播的区分取决于接收方的名字是唯一名还是组名,而发送进程则需要指定本地唯一名还是组名,而发送进程则需要指定本地名字编号和名字编号和LANALANA编号。接收进程要区分单播编号。接收进程要区分单播和组播,名字编号是关键,如果不区分,则用和组播,名字编号是关键,如果不区分,则用通用名字号(通用名字号(0 xff0 xff),否则唯一名编号接收为),否则唯一名编号接收为单播,组名编号接收为组播。单播,组名编号接收为组播。广播的接收和发送采用单独的命令,不过还是广播的接收和发送采用单独的命令,不过还是以应用进程注册名和以应用进程注册名和LANALANA编号为

14、基础。编号为基础。同步、异步和回调同步、异步和回调 同步调用是一种阻塞的单向调用方式,调用方同步调用是一种阻塞的单向调用方式,调用方必须一直等待必须一直等待NetbiosNetbios函数完成功能返回;函数完成功能返回;异步调用是一种非阻塞的单向调用方式,异步调用是一种非阻塞的单向调用方式,NetbiosNetbios函数调用后立即返回,调用双方可以函数调用后立即返回,调用双方可以各自继续完成自己工作,各自继续完成自己工作,NetBIOSNetBIOS接口提供事接口提供事件触发以便通知调用方被调用方已经件触发以便通知调用方被调用方已经NetbiosNetbios函数完成工作;函数完成工作;回调

15、是一种非阻塞的双向调用方法,调用方设回调是一种非阻塞的双向调用方法,调用方设置置NetbiosNetbios函数完成工作后的程序地址,以便函数完成工作后的程序地址,以便被调用方完成工作后执行预先设置的那个程序。被调用方完成工作后执行预先设置的那个程序。回调函数示例回调函数示例typedef int(_stdcall*PFunc)(int,int);int _stdcall Max(int a,int b)return ab?a:b;int _stdcall Test(PFunc func,int a,int b)return func(a,b);void main()cout Test(Max

16、,1,30)endl;3.1.33.1.3网络控制块网络控制块NCBNCB的应用的应用 用用#include#include 和和#pragma#pragma comment(lib,“netapi32.lib”)comment(lib,“netapi32.lib”)(或通过项目(或通过项目菜单)加入头文件和库文件菜单)加入头文件和库文件 所有所有NetBIOSNetBIOS网络功能实现的关键就是网络功能实现的关键就是NetbiosNetbios函数的调用,而不同功能实现的关键函数的调用,而不同功能实现的关键是该函数引用参数是该函数引用参数NCBNCB结构各个域的取值不同结构各个域的取值不同

17、同样的函数同样的函数NetbiosNetbios,同样的参数,同样的参数NCBNCB结构指结构指针,要实现不同的功能,就必须对针,要实现不同的功能,就必须对NCBNCB结构成结构成员初始化。员初始化。通过对通过对NCBNCB结构成员结构成员ncb_commandncb_command赋值来赋值来完成等待(同步)和非等待(回调和异步)两种完成等待(同步)和非等待(回调和异步)两种调用方式中选择调用方式中选择 参数参数NCBNCB结构结构Typedef struct _NCB UCHAR ncb_command;Typedef struct _NCB UCHAR ncb_command;UCHAR

18、 ncb_retcode;UCHAR ncb_retcode;UCHAR ncb_lsn;UCHAR ncb_lsn;UCHAR ncb_num;UCHAR ncb_num;PUCHAR ncb_buffer;PUCHAR ncb_buffer;WORD ncb_length;WORD ncb_length;UCHAR ncb_callnameNCBNAMSZ;UCHAR ncb_callnameNCBNAMSZ;UCHAR ncb_nameNCBNAMSZ;UCHAR ncb_nameNCBNAMSZ;UCHAR ncb_rto;UCHAR ncb_rto;UCHAR ncb_sto;UCH

19、AR ncb_sto;void(CALLBACK void(CALLBACK*ncb_post)(struct _NCB ncb_post)(struct _NCB*););UCHAR ncb_lana_num;UCHAR ncb_lana_num;UCHAR ncb_cmd_cplt;UCHAR ncb_cmd_cplt;UCHAR ncb_reserve10;UCHAR ncb_reserve10;HANDLE ncb_event;NCB,HANDLE ncb_event;NCB,*PNCB PNCB NCBNCB结构成员初始化举例结构成员初始化举例UCHAR RestNCB(UCHAR

20、jiangxue_lana)UCHAR RestNCB(UCHAR jiangxue_lana)NCB jiangxue_ncb;NCB jiangxue_ncb;memset(&jiangxue_ncb,0,sizeof(NCB);memset(&jiangxue_ncb,0,sizeof(NCB);jiangxue_ncb.ncb_command=NCBRESET;jiangxue_ncb.ncb_command=NCBRESET;jiangxue_ncb.ncb_callname0=MAXSESSIjiangxue_ncb.ncb_callname0=MAXSESSIONS;ONS;ji

21、angxue_ncb.ncb_callname2=MAXNAMEjiangxue_ncb.ncb_callname2=MAXNAMES;S;jiangxue_ncb.ncb_lana_num=jiangxue_lana;jiangxue_ncb.ncb_lana_num=jiangxue_lana;Netbios(&jiangxue_ncb);Netbios(&jiangxue_ncb);NBCheck(jiangxue_ncb)NBCheck(jiangxue_ncb)return(jiangxue_ncb.ncb_cmd_cplt);return(jiangxue_ncb.ncb_cmd_

22、cplt);非等待调用选择非等待调用选择 非等待调用赋值时增加非等待调用赋值时增加|ASYNCH|ASYNCH(表示将该字节的(表示将该字节的最高位置最高位置1 1),而等待调用不需要;例如,),而等待调用不需要;例如,pncb-pncb-ncb_command=NCBDGSEND|ASYNCHncb_command=NCBDGSEND|ASYNCH表表示数据报发送命令采用非等待调用方式;示数据报发送命令采用非等待调用方式;异步方式通过异步方式通过NCBNCB结构成员结构成员ncb_eventncb_event指定事件的指定事件的句柄,让句柄,让NetbiosNetbios函数完成命令后触发一

23、个事件函数完成命令后触发一个事件 ;回调方式是将处理程序的地址(回调函数)通过回调方式是将处理程序的地址(回调函数)通过NCBNCB结构成员结构成员ncb_postncb_post,让,让NetbiosNetbios函数命令完成后唤函数命令完成后唤醒该程序;醒该程序;一般回调函数定义如下:一般回调函数定义如下:void CALLBACK void CALLBACK 回调函回调函数名数名(PNCB);(PNCB);其中回调函数的参数指向的其中回调函数的参数指向的NCBNCB就是就是命令执行完成后的命令执行完成后的NCBNCB结构。结构。3.2.13.2.1数据报通信应用模型数据报通信应用模型定向

24、型数据报定向型数据报通信模型通信模型 广播式数据报通信模型广播式数据报通信模型 3.2.23.2.2实例中的广播式数据报通信算法与实现实例中的广播式数据报通信算法与实现 不论是广播式数据报通信还是定向型数据报,都要获取可用适配器网络编号并完成通信的初始化。接下来是唯一名LocalName和组名GroupName的注册,注册成功后返回相应唯一名字号NameNum和组名字号GroupNameNum。创建线程DGRecvBCTread用于实现广播数据报接收过程。定义了PdataGram结构指针,其结构的成员flag定义了Online,Offline,Listen和Message四种消息类型。键入命令

25、sendtoall后调用DGsendBCCMD(Elana0,NameNum)函数发送广播消息。提示进程用户“please input message to broadcast:”,键入发送的消息,设置消息标志flag为Message,然后调用函数DatagramSendBC(lana,NameNum,(char*)pdata,len)发送键入的消息内容,其中lana为LANA编号,NameNum为本地名字号。在退出命令exit的处理中,终止接收线程DGRecvBCTread。然后发送广播消息,告诉其他在线应用进程,本应用进程下线,并关闭线程对象,然后调用函数DeleteName(注册的名字,

26、Elana0)删除注册的组名和唯一名。3.2.33.2.3实例中的定向型数据报通信的算法与实现实例中的定向型数据报通信的算法与实现 初始化与名字注册同上一小节初始化与名字注册同上一小节 创建接收线程创建接收线程GDGRecvTreadGDGRecvTread和和SDGRecvTreadSDGRecvTread接收组播和单播消息接收组播和单播消息 第二个参数不同,前者为注册的组名绑定的名字第二个参数不同,前者为注册的组名绑定的名字号号GroupNameNumGroupNameNum,后者为注册名绑定的名,后者为注册名绑定的名字号。前者收到信息后,屏幕提示字号。前者收到信息后,屏幕提示“Multi

27、casting senders name:Multicasting senders name:组播发送组播发送进程注册名进程注册名”和和“the content of message:the content of message:收到的消息内容收到的消息内容”。在用户操作命令提示(在用户操作命令提示($)下,键入命令)下,键入命令“sendtoname”sendtoname”回车后,程序提示应用进程回车后,程序提示应用进程的用户键入接收应用进程注册的唯一名或组名的用户键入接收应用进程注册的唯一名或组名 屏幕提示屏幕提示“please input message to please input

28、message to send to the name send to the name 接收进程注册的唯一名接收进程注册的唯一名或组名或组名:”:”发送进程的用户键入要发送的消息回发送进程的用户键入要发送的消息回车后,该函数调用车后,该函数调用SDGSendSDGSend函数发送该消息函数发送该消息内容。内容。SDGSendSDGSend函数在函数在cnetbios.hcnetbios.h中有定义,并中有定义,并且有且有5 5个参数:可用的个参数:可用的LANALANA编号编号lanalana,接收,接收进程注册的唯一名或组名进程注册的唯一名或组名DestNameDestName,发送发送进

29、程注册名绑定的名字号进程注册名绑定的名字号NameNumNameNum,要发,要发送消息缓冲区的指针送消息缓冲区的指针(char(char*)pdata)pdata和发送缓和发送缓冲区的长度冲区的长度lenlen。3.3.13.3.1会话通信应用模型会话通信应用模型会话通信模型会话通信模型 3.3.23.3.2实例中会话服务器的算法与实现实例中会话服务器的算法与实现 初始化与名字注册同上一节;键入session操作命令后,提示用户信息“Enter the character*(to listen as a server)or the servers name(to connect as a c

30、lient):”,如果键入“*”字符,则该应用进程作为服务器 该进程设置消息标志pdata-flag为Listen,并用函数DatagramSendBC(Elana0,NameNum,(char*)pdata,len)发送广播消息,通知其他在线进程,本进程作为服务器。在while循环体中,首先服务器进程调用NetbiosListen(Elana0,pncb,LocalName)函数被动监听任何客户进程的连接请求。接收一个客户进程的连接请求后,调用函数接收一个客户进程的连接请求后,调用函数ServerSession(pncb)ServerSession(pncb)处理连接请求,将连接客户处理连接

31、请求,将连接客户进程的注册名送入进程的注册名送入DestNameDestName中,然后创建会话数中,然后创建会话数据接收线程据接收线程SessionReceiveThreadSessionReceiveThread,同时指定,同时指定该线程的调用参数该线程的调用参数(PVOID)pncb(PVOID)pncb。屏幕显示。屏幕显示“本地本地服务器进程注册名服务器进程注册名has accepted the has accepted the connection to connection to 远端客户进程注册名远端客户进程注册名!”!”,然后休息片刻,发送数据然后休息片刻,发送数据“Welco

32、me to Server!”Welcome to Server!”给客户进程,屏幕提示用户给客户进程,屏幕提示用户“When you send a When you send a message to the other party,the message message to the other party,the message exit means stopping to send!”exit means stopping to send!”,告诉用户当,告诉用户当键入消息键入消息“exit”exit”时,停止发送。然后进入发送循环。时,停止发送。然后进入发送循环。在在for(;)for

33、(;)循环体中,提示服务器进程用户循环体中,提示服务器进程用户“please please input message to send to input message to send to 客户进程注册名客户进程注册名:”:”键键入的消息。如果用户键入入的消息。如果用户键入“exit”exit”,则服务器进程终止,则服务器进程终止会话数据接收线程会话数据接收线程SessionReceiveThreadSessionReceiveThread,关闭,关闭线程句柄对象,断开连接,然后退出循环;如果不是,线程句柄对象,断开连接,然后退出循环;如果不是,则调用函数则调用函数SessionSend(E

34、lana0,SessionSend(Elana0,SessionNum,sbuffer,sizeof(sbuffer)SessionNum,sbuffer,sizeof(sbuffer)发送数发送数据,发送结束后,并判断返回据,发送结束后,并判断返回retcoderetcode,如果不是成,如果不是成功结束,表示对方已经关闭连接,退出循环。功结束,表示对方已经关闭连接,退出循环。当连接请求处理完毕后,服务器进程提示用户当连接请求处理完毕后,服务器进程提示用户“If If you need listen to the next,please type you need listen to the

35、 next,please type the letter y:”the letter y:”,如果用户键入,如果用户键入“y”y”则服务器进程则服务器进程进入下一轮循环,否则退出循环,回到用户操作命令进入下一轮循环,否则退出循环,回到用户操作命令提示状态提示状态$等待用户键入下一条命令。等待用户键入下一条命令。3.3.33.3.3实例中会话客户算法与实现实例中会话客户算法与实现 初始化与名字注册同上一节;初始化与名字注册同上一节;消息消息“The server The server 服务器进程注册名服务器进程注册名 is waiting is waiting for a client to c

36、onnect!”for a client to connect!”显示告诉用户有服务器进显示告诉用户有服务器进程等待连接。程等待连接。操作命令提示符操作命令提示符$下键入操作命令下键入操作命令sessionsession回车后,用回车后,用户进程提示信息户进程提示信息“Enter the character Enter the character*(to (to listen as a server)or the servers name(to listen as a server)or the servers name(to connect as a client):”connect as

37、a client):”,用户键入服务器注册名,用户键入服务器注册名 如果连接请求成功,则转入客户连接处理函数如果连接请求成功,则转入客户连接处理函数ClientSession(pncb)ClientSession(pncb),否则屏幕提示用户,否则屏幕提示用户“The The server server 服务器注册名服务器注册名 isnt listening!”isnt listening!”表示连接服表示连接服务器进程失败。务器进程失败。像服务器处理连接函数像服务器处理连接函数ServerSessionServerSession一样创建会一样创建会话数据接收线程话数据接收线程SessionR

38、eceiveThreadSessionReceiveThread,同时指,同时指定该线程的调用参数定该线程的调用参数(PVOID)pncb(PVOID)pncb。屏幕显示。屏幕显示“本本地客户进程注册名地客户进程注册名has connected to the server has connected to the server 远端服务器进程注册名远端服务器进程注册名!”!”然后屏幕提示用户然后屏幕提示用户“When you send a message When you send a message to the other party,the to the other party,the

39、message”exit“means stopping to send!”message”exit“means stopping to send!”,告诉用户当键入消息告诉用户当键入消息“exit”exit”时,停止发送。然后进入时,停止发送。然后进入发送循环。发送循环。在在for(;)for(;)循环体中,收到服务器进程发来的消息循环体中,收到服务器进程发来的消息“Welcome to Server!”Welcome to Server!”,并在屏幕上显示,并提,并在屏幕上显示,并提示客户进程用户示客户进程用户“please input message to please input mes

40、sage to send to send to 服务器进程注册名服务器进程注册名:”:”用户进入消息存放在缓用户进入消息存放在缓冲区冲区cbuffercbuffer内。内。如果用户键入如果用户键入“exit”exit”,则客户进程终止会话数,则客户进程终止会话数据接收线程据接收线程SessionReceiveThreadSessionReceiveThread,关闭,关闭线程句柄对象,断开连接,然后退出循环;如线程句柄对象,断开连接,然后退出循环;如果不是键入果不是键入“exit”exit”,则调用函数,则调用函数SessionSend(Elana0,SessionNum,SessionSen

41、d(Elana0,SessionNum,sbuffer,sizeof(sbuffer)sbuffer,sizeof(sbuffer)发送缓冲区发送缓冲区sbuffersbuffer的数据,发送结束后,并判断返回的数据,发送结束后,并判断返回retcoderetcode,如果不是成功结束,则表示对方已,如果不是成功结束,则表示对方已经关闭连接,则退出循环。发送成功结束后,经关闭连接,则退出循环。发送成功结束后,提示客户进程用户提示客户进程用户“please input please input message to send to message to send to 服务器进程注册名服务器进程注册名:”:”进入下一轮循环,以便用户键入消息。进入下一轮循环,以便用户键入消息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第3章基于NetBIOS的网络编程课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|