第五学期实习报告.docx

上传人:b****7 文档编号:9261161 上传时间:2023-02-03 格式:DOCX 页数:20 大小:174.74KB
下载 相关 举报
第五学期实习报告.docx_第1页
第1页 / 共20页
第五学期实习报告.docx_第2页
第2页 / 共20页
第五学期实习报告.docx_第3页
第3页 / 共20页
第五学期实习报告.docx_第4页
第4页 / 共20页
第五学期实习报告.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

第五学期实习报告.docx

《第五学期实习报告.docx》由会员分享,可在线阅读,更多相关《第五学期实习报告.docx(20页珍藏版)》请在冰豆网上搜索。

第五学期实习报告.docx

第五学期实习报告

实验总成绩:

——————————————————————————装订线—————————————————————————————————

报告份数:

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).客户端:

完成游戏人机界面的设计,以命令的方式向服务器请求,并显示相应的提示。

主要的命令有:

1.CONNECTIP地址端口号

指定游戏服务器的IP地址和端口号,连接到服务器。

响应:

连接成功/失败。

2.LOGIN用户名

用户登录,报告服务器玩家的名字。

响应:

成功/失败。

3.GUESS数字

猜数。

响应:

大了/小了/对了。

4.LISTTOP10

请求显示TOP10排行榜。

响应:

显示TOP10排行榜。

5.EXIT

退出游戏。

二.课程设计原理:

在WIN32平台上的WINSOCK编程都要经过下列步骤:

定义变量->获得WINDOCK版本->加载WINSOCK库->初始化->创建套接字->设置套接字选项->关闭套接字->卸载WINSOCK库->释放资源

 以下是WINSOCKC/S的建立过程:

 

服务端

客户端

1.初始化WSA

1.初始化WSA

2.建立SOCKET

2.建立SOCKET

3.绑定SOCKET

3.连接服务器

4.在指定的端口监听

4.发送和接收数据

5.接受一个连接

5.断开连接

6.发送和接收数据

7.断开连接

 

三.程序源代码

服务器:

 

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

#defineSERVER_PORT5208

intanswer=0;

structSample{

charname[11];

ints;

}score[200];

voidrandanswer()

{

srand((unsigned)time(NULL));

answer=(rand()%99)+1;

}

voidsorta()

{

inta,j;

for(a=19;a>0;a--)

{

for(j=0;j<20;j++)

{

if(score[j].s>score[j+1].s)

{

inttmpa;

chartmpb[11];

tmpa=score[j].s;

strcpy(tmpb,score[j].name);

score[j].s=score[j+1].s;

strcpy(score[j].name,score[j+1].name);

score[j+1].s=tmpa;

strcpy(score[j+1].name,tmpb);

}

}

}

}

intmain()

{

for(intt=0;t<200;t++)score[t].s=0;

WORDsockVersion=MAKEWORD(2,2);

WSADATAwsaData;

if(WSAStartup(sockVersion,&wsaData)!

=0)

{

return0;

}

SOCKETslisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(slisten==INVALID_SOCKET)

{

printf("<套接失败!

>\n");

return0;

}

sockaddr_insin;

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("<监听失败!

>");

return0;

}

SOCKETsClient;

sockaddr_inremoteAddr;

intnAddrlen=sizeof(remoteAddr);

charrevData[255];

intplayer=0;

while(true)

{

sClient=accept(slisten,(SOCKADDR*)&remoteAddr,&nAddrlen);

boolc=true;

while(c=true)

{

if(sClient==INVALID_SOCKET)

{

printf("<接受失败!

>");

continue;

}

printf("<客户端连接:

%s>\r\n",inet_ntoa(remoteAddr.sin_addr));

intret=recv(sClient,revData,50,0);

if(ret>0)

{

revData[ret]=0x00;

puts(revData);

}

if(revData[1]=='R')

{

strcpy(score[player].name,revData+3);

memset(revData,'\0',255*sizeof(char));

charsendData[50];

randanswer();

sprintf(sendData,"%d",answer);

puts(sendData);

send(sClient,sendData,strlen(sendData),0);

ret=recv(sClient,revData,255,0);

if

(ret>0)revData[ret]=0x00;

if(revData[0]=='*')

{

score[player].s=atoi(revData+1);

}

if(revData[0]=='!

')

{

c=false;

}

if(revData[1]=='T')

{

sorta();

charrank[800]="";

intd;

for(d=0;d<10;d++)

{

chartemp[30]="";

sprintf(temp,"%d,Player:

%s,Times:

%d\n",d+1,score[d].name,score[d].s);

strcat(rank,temp);

}

send(sClient,rank,strlen(rank),0);

}

printf("游戏玩家:

%s,游戏次数:

%d\n",score[player].name,score[player].s);

memset(revData,'\0',255*sizeof(char));

player++;

}

}

closesocket(sClient);

}

closesocket(slisten);

WSACleanup();

return0;

}

 

客户端:

 

#include

#include

#include

#include

#pragmacomment(lib,"ws2_32.lib")

#defineSERVER_PORT5208

intanswer;

intguessing(chartype[])

{

intp=0,p_i;

charguess[4];

boola=false;//设置一个布尔型(BOOL)变量m的值为false.注释:

布尔型变量只能是false或者true.

while(a!

=true)

{

p_i=0;

if(p>=1)gets(type);

while(type[p_i+6]!

='\0')

{

guess[p_i]=type[p_i+6];

p_i++;

}

guess[p_i]='\0';

p++;

if(atoi(guess)==answer)

a=true;

if(atoi(guess)

>\n",atoi(guess));

if(atoi(guess)>answer)printf("<您猜测的数据%d比随机产生的数字大!

>\n",atoi(guess));

}

printf("恭喜您猜数正确!

!

您共尝试了%d次!

\n",p);

returnp;

}

intmain()

{

A:

boolb=false;

charlogin[30];

charip[16];

charport[5];

printf("<请您输入正确的IP地址以及PORT以连接到服务器!

>\n<输入格式:

CONNECT[IPADRESS][PORT]>\n");

while(b==false)

{

gets(login);

if(login[0]!

='M')printf("<请您输入正确的IP地址以及PORT以连接到服务器!

>\n<输入格式:

CONNECT[IPADRESS][PORT]>\n");

if(login[7]=='')

{

intp,p_i=0;

while(login[p_i+8]!

='')

{

ip[p_i]=login[p_i+8];

p_i++;

}

ip[p_i]='\0';

b=true;

}

}

WORDsockVersion=MAKEWORD(2,2);

WSADATAdata;

if(WSAStartup(sockVersion,&data)!

=0)

{

return0;

}

SOCKETsclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(sclient==INVALID_SOCKET)

{

printf("

>");

return0;

}

sockaddr_inserAddr;

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);

return9;

}

printf("<连接成功!

>\n<请设置您的用户名(3~9个英文字母)>\n<输入格式:

LOGIN[username]>\n");

charusername[20];

chartype[20];

b=false;

while(b==false)

{

gets(type);

if(type[5]=='')

{

intn,n_i=0;

while(type[n_i+6]!

='\0')

{

username[n_i]=type[n_i+6];

n_i++;

}

username[n_i]='\0';

b=true;

}

elseprintf("<请设置您的用户名(3~9个英文字母)>\n<输入格式:

LOGIN[username]>\n");

}

printf("<设置用户名成功!

>\n");

charsendData[20]="#R_";

strcat(sendData,username);

charrecData[255];

G:

send(sclient,sendData,strlen(sendData),0);

Sleep(500);

intret=recv(sclient,recData,255,0);

if(ret>0)

{

recData[ret]=0x00;

answer=atoi(recData);

}

memset(recData,'\0',255*sizeof(char));

Z:

printf("<%s您好,欢迎进入猜数游戏!

!

>\n<输入格式:

GUESS[NUMBER(1~100)]>\n<输入格式:

LISTTOP10>\n<输入格式:

EXIT>\n",username);

gets(type);

if(type[0]=='G')

{

intgtime=guessing(type);

charscore[8]="*";

sprintf(score+1,"%d",gtime);

intstat=send(sclient,score,strlen(score),0);

Sleep(2000);

gotoG;

}

if(type[0]=='L')

{

charsendpata[20]="#Top";

sendpata[4]='\0';

charrRank[800];

intgo=send(sclient,sendpata,strlen(sendpata),0);

intret=recv(sclient,rRank,800,0);

printf("====猜数游戏前十名排行榜====\n");

puts(rRank);

Sleep(2000);

gotoG;

}

if(type[0]=='E')

{

send(sclient,"!

",1,0);

WSACleanup();

return0;

}elsegotoZ;

}

 

三.程序运行结果

服务器:

 

 

 

 

客户端:

 

 

 

4.心得收获

 

——————————————————————————装订线—————————————————————————————————

指导教师评语:

 

实验成绩:

指导(辅导)教师:

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

当前位置:首页 > PPT模板 > 自然景观

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1