第五学期实习报告.pdf
xxxx 学院 xxxxxxxxxxx 学院 课程设计报告 专业班级:学生姓名:学号(班内序号):年 月 日 装 订 线报 告 份 数:实验总成绩:第五学期实习报告 一 课程设计目的与任务 1目的:(1)加深对计算机网络的基本概念和原理,以及网络编程接口及 Winsock概念、编程原理的理解;(2)提高学生网络应用与编程的能力。学生在七个设计题目中选择一个,并可选择任意开发工具来设计完成,提高其分析与解决问题的能力,为大型网络编程打下坚实基础;(3)通过撰写课程设计报告,锻炼学生的逻辑组织和语言表达能力;(4)培养学生理论运用于实践的综合应用和设计创新能力。2任务:(1)设计完成与网络相关题目的基本功能要求;(2)调试运行之后,要求边演示边解释设计的思想、过程及采用的方法。(3)按一定的规范要求,撰写课程设计报告。二 课程设计的基本要求 1熟练掌握网络的基本概念和原理;2掌握网络编程接口及 Winsock 概念及编程原理;3掌握基于 TCP/IP 的 Internet 编程技术;4掌握各种软件开发工具的使用过程及方法。课程设计题目:猜数游戏 一猜数游戏的要求:(1).软件名:猜数游戏(分服务器和客户端两部分)(2).功能:游戏后台运行一个服务器软件,游戏者通过客户端登录后,服务器随机产生一个 1-100 之间的随机数供游戏者猜,游戏者从客户端输入一个数值,如果该数比设定的数大,软件提示:“大了”,如果该数比设定的数小,软件提示:“小了”,若相等,返回“猜对了,您共猜了*次”。服务器同时记录并维护一个游戏玩家的 TOP10 排行榜,供玩家查询。(3).编程语言及工具:自选(如 VB、JAVA、C#、Delphi、VC)(4).服务端:接受客户端的命令请求并提供相应的服务。(5).客户端:完成游戏人机界面的设计,以命令的方式向服务器请求,并显示相应的提示。主要的命令有:1CONNECT IP 地址 端口号 指定游戏服务器的 IP 地址和端口号,连接到服务器。响应:连接成功/失败。2LOGIN 用户名 用户登录,报告服务器玩家的名字。响应:成功/失败。3GUESS 数字 猜数。响应:大了/小了/对了。4LISTTOP10 请求显示 TOP10 排行榜。响应:显示 TOP10 排行榜。5EXIT 退出游戏。二课程设计原理:在 WIN32 平台上的 WINSOCK 编程都要经过下列步骤:定义变量-获得 WINDOCK 版本-加载 WINSOCK 库-初始化-创建套接字-设置套接字选项-关闭套接字-卸载 WINSOCK 库-释放资源 以下是 WINSOCK C/S 的建立过程:服务端 客户端 1.初始化 WSA 1.初始化 WSA 2.建立 SOCKET 2.建立 SOCKET 3.绑定 SOCKET 3.连接服务器 4.在指定的端口监听 4.发送和接收数据 5.接受一个连接 5.断开连接 6.发送和接收数据 7.断开连接 三程序源代码 服务器:#include#include#include#pragma comment(lib,ws2_32.lib)#define SERVER_PORT 5208 int answer=0;struct Sample char name 11;int s;score200;void randanswer()srand(unsigned)time(NULL);answer=(rand()%99)+1;void sorta()int a,j;for(a=19;a0;a-)for(j=0;j scorej+1.s)int tmpa;char tmpb11;tmpa=scorej.s;strcpy(tmpb,scorej.name);scorej.s=scorej+1.s;strcpy(scorej.name,scorej+1.name);scorej+1.s=tmpa;strcpy(scorej+1.name,tmpb);int main()for(int t=0;t200;t+)scoret.s=0;WORD sockVersion=MAKEWORD(2,2);WSADATA wsaData;if(WSAStartup(sockVersion,&wsaData)!=0)return 0;SOCKET slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(slisten=INVALID_SOCKET)printf(n);return 0;sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(5208);sin.sin_addr.S_un.S_addr=INADDR_ANY;if(bind(slisten,(LPSOCKADDR)&sin,sizeof(sin)=SOCKET_ERROR)printf(n);if(listen(slisten,5)=SOCKET_ERROR)printf();return 0;SOCKET sClient;sockaddr_in remoteAddr;int nAddrlen=sizeof(remoteAddr);char revData255;int player=0;while(true)sClient=accept(slisten,(SOCKADDR*)&remoteAddr,&nAddrlen);bool c=true;while(c=true)if(sClient=INVALID_SOCKET)printf();continue;printf(rn,inet_ntoa(remoteAddr.sin_addr);int ret=recv(sClient,revData,50,0);if(ret 0)revDataret=0 x00;puts(revData);if(revData1=R)strcpy(scoreplayer.name,revData+3);memset(revData,0,255*sizeof(char);char sendData50;randanswer();sprintf(sendData,%d,answer);puts(sendData);send(sClient,sendData,strlen(sendData),0);ret=recv(sClient,revData,255,0);if (ret 0)revDataret=0 x00;if(revData0=*)scoreplayer.s=atoi(revData+1);if(revData0=!)c=false;if(revData1=T)sorta();char rank800=;int d;for(d=0;d10;d+)char temp30=;sprintf(temp,%d,Player:%s,Times:%dn,d+1,scored.name,scored.s);strcat(rank,temp);send(sClient,rank,strlen(rank),0);printf(游戏玩家:%s,游戏次数:%dn,scoreplayer.name,scoreplayer.s);memset(revData,0,255*sizeof(char);player+;closesocket(sClient);closesocket(slisten);WSACleanup();return 0;客户端:#include#include#include#include#pragma comment(lib,ws2_32.lib)#define SERVER_PORT 5208 int answer;int guessing(char type)int p=0,p_i;char guess4;bool a=false;/设置一个 布尔型(BOOL)变量 m 的值为 false.注释:布尔型变量只能是 false 或者 true.while(a!=true)p_i=0;if(p=1)gets(type);while(typep_i+6!=0)guessp_i=typep_i+6;p_i+;guessp_i=0;p+;if(atoi(guess)=answer)a=true;if(atoi(guess)answer)printf(n,atoi(guess);if(atoi(guess)answer)printf(n,atoi(guess);printf(恭喜您猜数正确!您共尝试了%d 次!n,p);return p;int main()A:bool b=false;char login30;char ip16;char port5;printf(nn);while(b=false)gets(login);if(login0!=M)printf(nn);if(login7=)int p,p_i=0;while(loginp_i+8!=)ipp_i=loginp_i+8;p_i+;ipp_i=0;b=true;WORD sockVersion=MAKEWORD(2,2);WSADATA data;if(WSAStartup(sockVersion,&data)!=0)return 0;SOCKET sclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sclient=INVALID_SOCKET)printf();return 0;sockaddr_in serAddr;serAddr.sin_family=AF_INET;serAddr.sin_port=htons(5208);serAddr.sin_addr.S_un.S_addr=inet_addr(ip);if(connect(sclient,(sockaddr*)&serAddr,sizeof(serAddr)=SOCKET_ERROR)printf(n);closesocket(sclient);return 9;printf(nnn);char username20;char type20;b=false;while(b=false)gets(type);if(type5=)int n,n_i=0;while(typen_i+6!=0)usernamen_i=typen_i+6;n_i+;usernamen_i=0;b=true;else printf(nn);printf(n);char sendData20=#R_;strcat(sendData,username);char recData255;G:send(sclient,sendData,strlen(sendData),0);Sleep(500);int ret=recv(sclient,recData,255,0);if(ret 0)recDataret=0 x00;answer=atoi(recData);memset(recData,0,255*sizeof(char);Z:printf(nnnn,username);gets(type);if(type0=G)int gtime=guessing(type);char score8=*;sprintf(score+1,%d,gtime);int stat=send(sclient,score,strlen(score),0);Sleep(2000);goto G;if(type0=L)char sendpata20=#Top;sendpata4=0;char rRank800;int go=send(sclient,sendpata,strlen(sendpata),0);int ret=recv(sclient,rRank,800,0);printf(=猜数游戏前十名排行榜=n);puts(rRank);Sleep(2000);goto G;if(type0=E)send(sclient,!,1,0);WSACleanup();return 0;else goto Z;三程序运行结果 服务器:客户端:四心得收获 指导教师评语:实 验 成 绩:指导(辅导)教师:装 订 线