欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年用NetBIOS会话通信的方式实现简单FTP服务器终稿 .pdf

    • 资源ID:39717249       资源大小:214.16KB        全文页数:13页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年用NetBIOS会话通信的方式实现简单FTP服务器终稿 .pdf

    上 海 电 力 学 院基于网络的应用开发课程设计报告(2014/2015 学年第一学期)课题名称用 NetBIOS会话通信的方式实现简单FTP服务器课题号八院(系)电子与信息工程学院专业通信工程班级2011112 学生王坚学号20112246 时间2014 年 12 月 1 日 2014 年 12 月 5 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -一、课程设计任务、简单 FTP服务器包括服务器端和客户端,使用NetBIOS实现服务器端和客户端之间的通信,通信方式为会话通信;、简单FTP 服务器:只要求实现文件上传功能,文件大小限制自定;、客户端:输入所要上传文件的名称,读入文件的内容并把它发送到服务器;、服务器端:接收数据,并把接收到的数据写入文件;、使用VC6.0 的开发环境,构建工程为Win32 Console Application类型。二、基本原理会话是一种面向连接的可靠通信方式。在进行会话通信之前,必须首先建立一个会话连接,客户及利用NCBCALL 命令同一个已知的服务建立连接;而服务器则使用NCBLISTEN“侦听”进入的客户机连接。若两个命令中有一个成功,NetBIOS接口便会建立一个会话,并分别为会话双方赋予唯一的会话号。随后,通信双方便可利用该会话号进行会话通信,与数据报相比,会话通信可以确保数据的完整性、抵达顺序以及传输可靠性,等等。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页 -下图为会话通信的基本模型从图中不难看出,NetBIOS的会话通信的主要分为如下6 个步骤:初始化。通信双方分别执行NCBRESET 命令,复位各自的NetBIOS。添加名字。为了建立会话,通信双方应在各自的本地名字表中添加唯一名。建立会话。会话建立过程由服务器和客户机协同完成,服务器方使用 NCBLISTEN 命令等待客户机的连接请求,客户机使用NCBCALL 命令向服务器发起会话连接请求,一旦会话建立成功,双方的 NetBIOS将各自返回一个本地会话号,以后通信双方就可使用会话号进行会话通信。数据传输。会话建立后,双方便可利用 NCBSEND和 NCBRECV等会话命令进行会话通信。拆除会话。当数据传输结束时,任何一方均可发出NCBHANGUP名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 13 页 -命令来拆除指定会话号上的会话连接,以及时释放系统资源。删除名字。在会话通信进程结束时,双方还应删除各自本地名字表中的名字。三、方案设计在理解会话通信模型的基础上,按照会话程序设计的基本步骤,便能轻松地设计会话通信程序。会话双方用NCBLISTEN/NCBCALL命令得到本地会话号,然后用NCBSEND 和 NCBRECV 等会话命令进行会话通信。服务器端:服务器进程使用NCBLISTEN 命令侦听客户进程的连接请求,当客户进程的连接请求到来时,响应并建立会话,随后,服务器进程进入接收等待,每收到一个客户进程发来的数据,便将其显示,然后继续等待接收下一个数据。当客户进程拆除会话时,退出循环,等待下一次的连接请求。客户端:客户进程使用 NCBCALL 命令向指定服务器发出连接请求,会话建立后,紧接着设置接收。当收到服务器发来的Please input name to send:和Please input message to send:的消息后,用户通过键盘分别输入名称与内容,通过指定的会话链路将所有数据发送到服务器方,等到所有数据传送完,客户进程拆除会话,退出循环,结束本次会话。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 13 页 -四、实验结果名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 13 页 -五、总结与心得体会通过本次设计我熟悉VC6.0程序的开发环境和NetBIOS的使用。运用 VC6.0 来完成基于 NetBIOS的会话通信方式来实现简单FTP服务器。在这次实验中我开始不是很会这个程序但是在同组成员的帮助下了解了这个程序,结果不是很好但是我在中间收获了很多。六、附录:实验代码服务器端:#include#include#include#include#include#include#pragma comment(lib,netapi32.lib)#define MAXSESSIONS 254/最大会话数为254#define MAXNAMES 254 /最大名字数为254 UCHAR Lana_Enum(LANA_ENUM*lenum)/获取可用lana NCB ncb;UCHAR ucRc;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBENUM;ncb.ncb_buffer=(PUCHAR)lenum;ncb.ncb_length=sizeof(LANA_ENUM);ucRc=Netbios(&ncb);return(ucRc);UCHAR RestNCB(UCHAR lana)/复位特定的网络适配器 NCB ncb;UCHAR ucRc;memset(&ncb,0,sizeof(ncb);ncb.ncb_command=NCBRESET;ncb.ncb_callname0=MAXNAMES;ncb.ncb_callname2=MAXSESSIONS;ncb.ncb_lana_num=lana;ucRc=Netbios(&ncb);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 13 页 -return(ucRc);UCHAR AddName(CHAR*Name,UCHAR*NameNum,UCHAR lana)/添加名字 NCB ncb;/LANA_ENUM lenum;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBADDNAME;ncb.ncb_lana_num=lana;strcpy(char*)ncb.ncb_name,Name);Netbios(&ncb);*NameNum=ncb.ncb_num;return(ncb.ncb_cmd_cplt);UCHAR HangupSession(UCHAR SessionNum)NCB ncb;UCHAR ucRc;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBHANGUP;ncb.ncb_lsn=SessionNum;ucRc=Netbios(&ncb);return(ucRc);void NetbiosListen(PNCB pncb,HANDLE hEvent,CHAR SourName,CHAR DestName)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBLISTEN|ASYNCH;strcpy(char*)pncb-ncb_name,SourName);strcpy(char*)pncb-ncb_callname,DestName);pncb-ncb_rto=0;pncb-ncb_sto=5;pncb-ncb_cmd_cplt=0 xff;pncb-ncb_event=hEvent;Netbios(pncb);void SessionSend(PNCB pncb,UCHAR Num,UCHAR*pBuffer,WORD Length)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBSEND;pncb-ncb_lsn=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=Length;Netbios(pncb);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 13 页 -void SessionRecv(PNCB pncb,UCHAR Num,HANDLE hEvent,UCHAR*pBuffer)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBRECV|ASYNCH;pncb-ncb_lsn=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=512;pncb-ncb_cmd_cplt=0 xff;pncb-ncb_event=hEvent;/pncb-ncb_lana_num=lana;Netbios(pncb);int main()NCB ServerNncb;UCHAR LocalName16;UCHAR NameNum,SessionNum;HANDLE hEvent;LANA_ENUM lenum;char buff512;if(Lana_Enum(&lenum)!=NRC_GOODRET)printf(LanaEnum Error!n);return 0;if(RestNCB(lenum.lana0)!=0)printf(Reset NCB FALSE!n);return 0;printf(Lana_num is:%dn,lenum.lana0);printf(Reset NCB OK!n);strcpy(LocalName,Server);if(AddName(LocalName,&NameNum,lenum.lana0)return 0;printf(Add Name OK!n);hEvent=CreateEvent(NULL,FALSE,FALSE,Server);if(hEvent=NULL)return 0;printf(Create Event OK!n);for(;)printf(READY!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 13 页 -NetbiosListen(&ServerNncb,hEvent,LocalName,*);/侦听客户连接请求;WaitForSingleObject(hEvent,0 xffffffff);if(ServerNncb.ncb_cmd_cplt!=0)return 0;printf(Listen OK!n);SessionNum=ServerNncb.ncb_lsn;printf(SessionNum is:%dn,ServerNncb.ncb_lsn);strcpy(buff,Welcome to Server!n);SessionSend(&ServerNncb,SessionNum,(UCHAR*)buff,sizeof(buff);for(;)memset(buff,0,512);SessionRecv(&ServerNncb,SessionNum,hEvent,(UCHAR*)buff);WaitForSingleObject(hEvent,0 xffffffff);/printf(Recv:);if(ServerNncb.ncb_cmd_cplt=0)printf(收到的文件名字是:%s,长度为:%d 字节 n,buff,strlen(buff);printf(n);SessionSend(&ServerNncb,SessionNum,(UCHAR*)buff,sizeof(buff);continue;else if(ServerNncb.ncb_cmd_cplt=0)printf(收到的文件内容是:%s,长度为:%d 字节 n,buff,strlen(buff);printf(n);SessionSend(&ServerNncb,SessionNum,(UCHAR*)buff,sizeof(buff);continue;else break;客户端:#include#include#include#include#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 13 页 -#include#pragma comment(lib,netapi32.lib)#define MAXSESSIONS 254/最大回话数为254#define MAXNAMES 254 /最大名字数为254 UCHAR Lana_Enum(LANA_ENUM*lenum)/获取可用lana NCB ncb;UCHAR ucRc;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBENUM;ncb.ncb_buffer=(PUCHAR)lenum;ncb.ncb_length=sizeof(LANA_ENUM);ucRc=Netbios(&ncb);return(ucRc);UCHAR RestNCB(UCHAR lana)/复位特定的网络适配器 NCB ncb;UCHAR ucRc;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBRESET;ncb.ncb_callname0=MAXSESSIONS;ncb.ncb_callname2=MAXNAMES;ncb.ncb_callname3=TRUE;ncb.ncb_lana_num=lana;ucRc=Netbios(&ncb);return(ucRc);UCHAR AddName(UCHAR*Name,UCHAR*NameNum,UCHAR lana)/添加名字 NCB ncb;LANA_ENUM lenum;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBADDNAME;ncb.ncb_lana_num=lana;strcpy(char*)ncb.ncb_name,Name);Netbios(&ncb);*NameNum=ncb.ncb_num;return(ncb.ncb_cmd_cplt);UCHAR HangupSession(UCHAR SessionNum)NCB ncb;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 13 页 -UCHAR ucRc;memset(&ncb,0,sizeof(NCB);ncb.ncb_command=NCBHANGUP;ncb.ncb_lsn=SessionNum;ucRc=Netbios(&ncb);return(ucRc);UCHAR NetbiosCall(PNCB pncb,CHAR SourName,CHAR DestName)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBCALL;strcpy(char*)pncb-ncb_name,SourName);strcpy(char*)pncb-ncb_callname,DestName);pncb-ncb_rto=0;pncb-ncb_sto=10;Netbios(pncb);void SessionSend(PNCB pncb,UCHAR Num,UCHAR*pBuffer,WORD Length,UCHAR lana)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBSEND;pncb-ncb_lsn=Num;/会话编号 pncb-ncb_buffer=pBuffer;pncb-ncb_length=Length;pncb-ncb_lana_num=lana;Netbios(pncb);void SessionRecv(PNCB pncb,UCHAR Num,HANDLE hEvent,UCHAR*pBuffer)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBRECV|ASYNCH;pncb-ncb_lsn=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=512;pncb-ncb_cmd_cplt=0 xff;pncb-ncb_event=hEvent;Netbios(pncb);int main()NCB ServerNncb;NCB ClientNcb;UCHAR LocalName16;UCHAR NameNum,SessionNum;LANA_ENUM lenum;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 13 页 -HANDLE hEvent;char buff512;if(Lana_Enum(&lenum)!=NRC_GOODRET)printf(LanaEnum Error!n);return;printf(Lana_num is:%dn,lenum.lana0);if(RestNCB(lenum.lana0)!=0)printf(ResetNcb Error!);return;printf(Reset NCB OK!n);strcpy(LocalName,Client);if(AddName(LocalName,&NameNum,lenum.lana0)return 0;printf(Add Name OK!n);hEvent=CreateEvent(NULL,FALSE,FALSE,Client);/初始化为无效状态、自动恢复为无效状态 if(hEvent=NULL)return 0;printf(Create Event OK!n);printf(CALL.n);for(;)NetbiosCall(&ClientNcb,LocalName,Server);if(ClientNcb.ncb_cmd_cplt!=0)printf(CALL.n);continue;SessionNum=ClientNcb.ncb_lsn;/呼叫成功,得到本地会话号 break;SessionRecv(&ClientNcb,SessionNum,hEvent,(UCHAR*)buff,lenum.lana0);/收到数据,事件触发 WaitForSingleObject(hEvent,0 xffffffff);/等待服务器发来欢迎消息 printf(buff);printf(n);for(;)printf(Please input name to send:);memset(buff,0,512);名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 13 页 -scanf(%s,buff);if(strcmp(buff,exit)=0)break;printf(Please input message to send:);memset(buff,0,512);scanf(%s,buff);if(strcmp(buff,exit)=0)break;SessionSend(&ClientNcb,SessionNum,(UCHAR*)buff,strlen(buff),lenum.lana0);/会话发送 memset(buff,0,512);SessionRecv(&ServerNncb,SessionNum,hEvent,(UCHAR*)buff,lenum.lana0);WaitForSingleObject(hEvent,0 xffffffff);printf(%s n,buff);printf(n);memset(buff,0,512);continue;printf(%s n,buff);printf(n);memset(buff,0,512);continue;/实际要发送的字节数 HangupSession(SessionNum);/拆除会话 return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 13 页 -

    注意事项

    本文(2022年用NetBIOS会话通信的方式实现简单FTP服务器终稿 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开