吴尚_计算机网络编程实验报告

吴尚_计算机网络编程实验报告

ID:18774918

大小:641.31 KB

页数:42页

时间:2018-09-23

吴尚_计算机网络编程实验报告_第1页
吴尚_计算机网络编程实验报告_第2页
吴尚_计算机网络编程实验报告_第3页
吴尚_计算机网络编程实验报告_第4页
吴尚_计算机网络编程实验报告_第5页
资源描述:

《吴尚_计算机网络编程实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算机网络编程实验报告学院计算机学院专业计算机科学与技术年级2010级姓名吴尚学号30102160802012年4月25日Phase1:EstablishingClient-ServerCommunications1.题目要求此题目要求利用TCP套接字编程建立一个服务端与客户端进行通信的网络,在建立TCP连接的基础上实现报文的交换以及报文的处理。在本实验中,要利用TCP套接字编程在集中式的P2P网络架构中建立一个P2P客户端,其中由一个中心服务器负责保存并维护整个网络中的文件。当一个用户想要在网络中搜索一

2、个文件,只需要向中心服务器发送一个请求,服务器在中心数据库中运行请求,并返回文件及其所在位置的列表。用户可以指定想要下载的文件,与该文件拥有者的连接就会被打开。本阶段P2P的客户端要与P2P的服务端进行交互,并实现以下5个主要功能:1.服务器验证(提供用户名和加密的密码)2.将想要分享给其他用户的文件列表发送给服务器3.发送请求给服务器,搜索想要下载的一个文件。4.服务器接收请求并解析,将搜索结果反馈给用户。5.登出。2.开发环境操作系统:WindowsXP编程语言:C++编译环境:MicrosoftVi

3、sualC++6.03.程序详解3.1服务器端程序描述3.1.1基本功能此部分主要包括完成网络通信所必要的服务器端的基本功能,主要的功能函数包括:(1)WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED);这个函数用来创建一个原始的套接字,使用时需要包含winsock2.h头文件和链接wsock32.lib库。(2)bind(listenSocket,(SOCKADDR*)&saServer,sizeof(SOCKADD

4、R));这个函数主要实现了将本地地址与套接口进行捆绑。(3)listen(listenSocket,10);这个函数用于监听用户的连接请求。第二个参数是你监听客户端的最大个数,如连接到主机上的客户端超过其数listen则会返回一个错误代号。3.1.2多线程的创建CreateThread(NULL,0,AcceptThread,(LPVOID)sIP,0,&tcpThreadId);这个函数将在主线程的基础上建立一个新的线程,用于连接多个客户端。DWORDWINAPIAcceptThread(LPVOIDl

5、pParam);这个函数用来接收用户线程的一系列操作。3.1.3用户登录验证boolCheckLogin(charrecvbuf[]){charcode;intcodenum;if(recvbuf[0]!='L'

6、

7、recvbuf[1]!='G'

8、

9、recvbuf[2]!='I'

10、

11、recvbuf[3]!='N')returnfalse;if(recvbuf[4]!='j'

12、

13、recvbuf[5]!='e'

14、

15、recvbuf[6]!='r'

16、

17、recvbuf[7]!='r'

18、

19、recvbuf[8]!='y

20、')returnfalse;inti=4;while(recvbuf[i]!='#')i++;i++;codenum=(int)recvbuf[i]-48;intstart=++i;while(recvbuf[i]!='')i++;i--;intend=i;Decode(recvbuf,start,end,codenum);i=start;if(recvbuf[i]!='t'

21、

22、recvbuf[i+1]!='c'

23、

24、recvbuf[i+2]!='p')//密码为tcpreturnfalse;retur

25、ntrue;}这个函数用来验证即将登陆用户的用户名和密码是否正确。实现方法如下:首先检查recvbuf头部是否为"LGIN",然后检查用户名是否匹配。检查成功后,调用decode()函数将用户发来的密文解密,再验证密码时是否正确。以上过程均成功后,返回true,否则返回false。voidDecode(charmessage[],intstart,intbegin,intcodenum){for(inti=start;i<=begin;i++)message[i]+=codenum;}此函数用来解密用户发

26、来的密文部分。首先从头部解析密钥,然后根据密钥将暗文转换为明文。用户名为“jerry”,密码为“tcp”。3.1.4接收上传文件voidSaveToMem(charrecvbuf[],CStringclientIP){charportChar[10]="";inti=4;for(;recvbuf[i]!='#';i++)portChar[i-4]=recvbuf[i];CStringport;port.Format("%s",

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。