实验七简单的服务器客户端程序实验报告.docx
《实验七简单的服务器客户端程序实验报告.docx》由会员分享,可在线阅读,更多相关《实验七简单的服务器客户端程序实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
实验七简单的服务器客户端程序实验报告
系别
洛阳理工学院实验报告
计算机系
班级
B120503
学号
B12050316
姓名
段浴
课程名称
计算机网络
实验日期
2014/11/8
实验名称
简单的客户/服务器程序设计与实现
成绩
实验目的:
1、熟悉MicrosoftVisualStudio2008编程环境。
2、了解TCP与UDP协议,以及它们之间的区别。
3、了解客户/服务器模型原理。
4、熟悉Socket编程原理,掌握简单的套接字编程。
实验条件:
硬件:
PC机(两台以上)、网卡、已经设定好的以太网环境
软件:
MicrosoftVisualStudio2008
实验原理:
1、编写用TCP协议实现的Client端和Server端程序并调试通过
Socket()建立流式套接字,返回套接字号。
bind(),套接字s与本地地址相连。
listen(),通知TCP,服务器准备好接收连接。
accept。
接受连接,等待客户端的连接...
连接建立,accept。
返回,得到新的套接字,sc
recvt()/send(),在套接字sc上读/写数据,直到
数据交换完毕
closesocket(),关闭套接字sc
closesocket(),关闭最初套接字s,服务结束
客户方
Socket(),建立流失套接字,
返回套接字号
connect(),将套接字s与远
地主机连接
send()/recv(),在套接字上读
/写数据,直到数据交换完
closesocket(),关闭套接字
结束TCP对话
实验内容:
Sever端代码:
//server.cpp:
定义控制台应用程序的入口点。
#include
#include
#include
#include
#pragmacomment(lib,"WS2_32")
SOCKETsock1,sock2;
intsin_size;
structsockaddr_inmy_addr,their_addr;
charname[20];
〃初始化函数Tcp
voidInit()
{
printf("\n\n\nServer:
TCP\n\n\n");
//建立套接字
constWORDwMinver=0x0101;
WSADATAwsadata;
if(0!
=:
:
WSAStartup(wMinver,&wsadata))
perror("Startsocketerror!
");
if(INVALID_SOCKET==(sock仁:
:
socket(AF_INET,SOCK_STREAM,0)))
perror("Createsocketerror!
");
my_addr.sin_family=AF」NET;
my_addr.sin_addr.S_un.S_addr=INADDR_ANY;
my_addr.sin_port=htons(1000);
if(SOCKET_ERROR==:
:
bind(sock1,(structsockaddr*)&my_addr,sizeof(my_addr))){perror("Bindingstreamsocket");
exit
(1);
}
//开始侦听
if(SOCKET_ERROR==:
:
listen(sock1,5))
{
perror("Listeningstreamsocket");
exit
(1);
}
//接受连接
printf("Readytoserveclient.Pleaseconnect...\n\n\n");
sin_size=sizeof(structsockaddr_in);
if((sock2=accept(sock1,(structsockaddr*)&their_addr,&sin_size))==-1)
{
perror("Acceptingstreamsocket");
exit
(1);
printf(”}
〃选择菜单
intmenu()
{
}
Acceptinganewconnet:
%s",inet_ntoa(their_addr.sin_addr));
char*s=(char*)malloc(2*sizeof(char));
intc;
printf("\n\n\n
Server:
Menu\n\n\n");
printf("
*********************************\n\n");
printf("
*
1.Send
Message
*\n");
printf("
*
2.ReceiveMessage
*\n");
printf("
*
3.Exit
*\n\n");
printf("
*********************************\n");
do
{
printf("\nEnteryourchoice:
");
gets(s);
if(s[0]=='\0'){
gets(s);
}
c=atoi(s);
}while(c<0||c>3);
free(s);
returnc;
}
〃消息发送函数
voidSend()
{
charMsg[10240];
printf("\nPleaseInputthemessage:
");
gets(Msg);
Msg[10239]='\0';
:
:
send(sock2,Msg,strlen(Msg),0);
}
〃消息接收函数
voidReceive()
{
intlen;
charbuf[10240];
for(inti=0;i<10240;i++){
buf[i]='\0';
}
if((len=:
:
recv(sock2,buf,10240,0))==-1)
{
perror("Recevingdataerror");
exit
(1);
}
printf("TheReceivedMessage:
%s\n",buf);
}
〃主函数
voidmain()
{
Init();
for(;;)
{
switch(menu())
{
case1:
Send();
break;
case2:
Receive();
break;
case3:
exit(0);
}
}
〃:
:
closesocket(sock2);
:
:
closesocket(sock1);
:
:
WSACIeanup();
}
Client端代码:
//client.cpp:
定义控制台应用程序的入口点。
//
#include
#include
#include
#include
#pragmacomment(lib,"WS2_32")
SOCKETsock1,sock2;
intsin_size;
structsockaddr_inmy_addr,their_addr;
charname[20];
〃初始化函数Tcp
voidInit()
{
printf("\n\n\nClient:
TCP\n\n\n");
//建立套接字
constWORDwMinver=0x0101;
WSADATAwsadata;
if(0!
=:
:
WSAStartup(wMinver,&wsadata))
perror("Startsocketerror);
if(INVALID_SOCKET==(sock仁:
:
socket(AF_INET,SOCK_STREAM,0)))
perror("Createsocketerror!
");
my_addr.sin_family=AF」NET;
my_addr.sin_addr.S_un.S_addr=inet_addr("192.168.93.48");my_addr.sin_port=htons(1000);
//请求连接
printf(”connecting...");
sin_size=sizeof(structsockaddr_in);
if(sock2=(:
:
connect(sock1,(LPSOCKADDR)&my_addr,sin_size))==-1){
perror("Acceptingstreamsocket");
exit
(1);
}
}
II选择菜单
intmenu()
{
char*s=(char*)malloc(2*sizeof(char));
Menu\n\n\n");
intc;
printf("\n\n\n
printf("
*******************************
**\n\n");
printf("
*\n");
printf("*\n");
printf("*\n\n");
printf("
*******************************
**\n");
do
{
printf("\ngets(s);if(s[O]=='\O'){gets(s);
}
c=atoi(s);}while(c<0||c>3);free(s);returnc;
Client:
1.SendMessage
2.ReceiveMessage
*3.Exit
Enteryourchoice:
");
}
//消息发送函数
voidSend()
{
charMsg[10240];
printf("\nPleaseInputthemessage:
");
gets(Msg);
Msg[10239]='\0';
:
:
send(sock1,Msg,strlen(Msg),0);
}
//消息接收函数
voidReceive(){
intlen;
charbuf[10240];
for(inti=0;i<10240;i++){
buf[i]='\O:
}
if((len=:
:
recv(sock1,buf,10240,0))==-1)
{
perror("Recevingdataerror");exit
(1);
}
printf("TheReceivedMessage:
%s\n",buf);
}
//主函数
voidmain()
{
Init();
for(;;)
{
switch(menu())
{case1:
Send();break;
case2:
Receive();break;
case3:
exit(0);
}
}
:
:
closesocket(sock2);
:
:
closesocket(sock1);:
:
WSACleanup();
}
实验结果
Server端界面:
发送信息
曲E八计負■粗商4HI实瑩七HIi\Dflhnf\Clir*nt_pnn
Gonncm七d.nsi■…
Client:
Menu
1.Gan!
2.Beehive
3.E