西电网络编程第2章.ppt

西电网络编程第2章

for(i=0;ilenum.length;i++) { DelName( lenum.lana[i], CLIENT_NAME); CloseHandle(hEvent[i]); } GlobalFree(hEvent); GlobalFree(pncb); return 0; } 习题与思考题   1. 简述NetBIOS的概念、特点以及它能够提供哪些网络服务。   2. 简述NetBIOS数据报的含义及特点。   3. 广播式数据报与定向型数据报在工作方式上有何异同?   4. 简述NetBIOS会话的含义及特点。   5. 简述Ncb/Mcb的含义及作用。   6. 简述Ncb的LANA编号域的含义,并回答为什么要在每一个LANA编号上尝试通信。   7. NetBIOS命令完成的等待方式与不等待方式有何区别?   8. 简述NetBIOS通信程序的初始化过程。   9. 编程实现在本地名字表中添加一个组名“OurGroup”。   10. 在LAN中的一台PC上添加NetBIOS名字“MyNetBIOS”,在另一台PC上编程实现在网络上查找该名字的位置。   11. 利用定向型数据报程序设计一个基于LAN的聊天程序。   12. 利用会话通信程序设计一个文件传输程序。 // // server.cpp: Defines the entry point for the console application. // ? #include stdafx.h #include windows.h #include stdio.h #include nb30.h #include NetBIOScmd.h #define MAX_SESSIONS 254 #define MAX_NAMES 254 #define MAX_BUFFER 1024 ? #define SERVER_NAME server ? // //function to realize NCBLISTEN // int Listen(PNCB pncb, int lana, char *server, HANDLE hEvent) { pncb-ncb_command = NCBLISTEN|ASYNCH; pncb-ncb_lana_num = lana; memset( pncb-ncb_name, , NCBNAMSZ ); strncpy( (char *)pncb-ncb_name, server, strlen(server) ); memset( pncb-ncb_callname, , NCBNAMSZ ); pncb-ncb_callname[0] = *; pncb-ncb_event = hEvent; //you also can use callback fuction to provide service to client //pncb-ncb_post=listencallback; if(Netbios(pncb)!=NRC_GOODRET) {  printf(Netbios NCBLISTEN ERROR:%d.\n,pncb-ncb_retcode); return pncb-ncb_retcode; } return NRC_GOODRET; } ? // //Thread to give a simple service to client // DWORD WINAPI ServerThread(PVOID lpParam) { PNCB pncb = (PNCB)lpParam; NCB ncb; char buff[MAX_BUFFER], Clientname[NCBNAMSZ+1]; DWORD Bufferlen, retval = NRC_GOODRET; ? FormatNetbiosName( (char *)pncb-ncb_callname, Clientname ); ? printf(a connect come\n); ZeroMemory( buff, MAX_BUFFER ); Bufferlen = MAX_BUFFER; retval = Recv( pncb-ncb_lana_num, pncb-ncb_lsn, buff, Bufferlen ); if(retval!=NRC_GOODRET)   return pncb-ncb_retcode; printf(Massage from[%s]:%s\n,Clientname,buff); ZeroMemory(buff,MAX_BUFFER); Buffe

文档评论(0)

1亿VIP精品文档

相关文档