第五学期实习报告Word文档格式.docx
《第五学期实习报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《第五学期实习报告Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
游戏后台运行一个服务器软件,游戏者通过客户端登录后,服务器随机产生一个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
2.建立SOCKET
3.绑定SOCKET
3.连接服务器
4.在指定的端口监听
4.发送和接收数据
5.接受一个连接
5.断开连接
6.发送和接收数据
7.断开连接
三.程序源代码
服务器:
#include<
stdio.h>
winsock2.h>
time.h>
#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"
);
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)
绑定失败!
if(listen(slisten,5)==SOCKET_ERROR)
监听失败!
"
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)
接受失败!
continue;
客户端连接:
%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);
!
'
c=false;
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);
游戏玩家:
%s,游戏次数:
score[player].name,score[player].s);
player++;
closesocket(sClient);
closesocket(slisten);
WSACleanup();
客户端:
stdlib.h>
windows.h>
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]!
='
guess[p_i]=type[p_i+6];
p_i++;
guess[p_i]='
p++;
if(atoi(guess)==answer)
a=true;
if(atoi(guess)<
answer)printf("
您猜测的数据%d比随机产生的数字小!
atoi(guess));
if(atoi(guess)>
您猜测的数据%d比随机产生的数字大!
恭喜您猜数正确!
您共尝试了%d次!
p);
returnp;
A:
boolb=false;
charlogin[30];
charip[16];
charport[5];
请您输入正确的IP地址以及PORT以连接到服务器!
\n<
输入格式:
CONNECT[IPADRESS][PORT]>
while(b==false)
gets(login);
if(login[0]!
M'
)printf("
if(login[7]=='
'
intp,p_i=0;
while(login[p_i+8]!
ip[p_i]=login[p_i+8];
ip[p_i]='
b=true;
WSADATAdata;
data)!
=0)
SOCKETsclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sclient==INVALID_SOCKET)
invalidsocket!
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)
连接失败!
closesocket(sclient);
return9;
连接成功!
请设置您的用户名(3~9个英文字母)>
LOGIN[username]>
charusername[20];
chartype[20];
b=false;
gets(type);
if(type[5]=='
intn,n_i=0;
while(type[n_i+6]!
username[n_i]=type[n_i+6];
n_i++;
username[n_i]='
elseprintf("
设置用户名成功!
charsendData[20]="
#R_"
strcat(sendData,username);
charrecData[255];
G:
send(sclient,sendData,strlen(sendData),0);
Sleep(500);
intret=recv(sclient,recData,255,0);
recData[ret]=0x00;
answer=atoi(recData);
memset(recData,'
Z:
%s您好,欢迎进入猜数游戏!
GUESS[NUMBER(1~100)]>
LISTTOP10>
EXIT>
username);
if(type[0]=='
G'
intgtime=guessing(type);
charscore[8]="
*"
sprintf(score+1,"
gtime);
intstat=send(sclient,score,strlen(score),0);
Sleep(2000);
gotoG;
L'
charsendpata[20]="
#Top"
sendpata[4]='
charrRank[800];
intgo=send(sclient,sendpata,strlen(sendpata),0);
intret=recv(sclient,rRank,800,0);
====猜数游戏前十名排行榜====\n"
puts(rRank);
E'
send(sclient,"
1,0);
}elsegotoZ;
三.程序运行结果
4.心得收获
指导教师评语:
实验成绩:
指导(辅导)教师: