实验七简单的服务器客户端程序实验报告.docx
《实验七简单的服务器客户端程序实验报告.docx》由会员分享,可在线阅读,更多相关《实验七简单的服务器客户端程序实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
![实验七简单的服务器客户端程序实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/13/9cd21a9d-41d5-4286-b9b8-f17dd13211b5/9cd21a9d-41d5-4286-b9b8-f17dd13211b51.gif)
实验七简单的服务器客户端程序实验报告
洛阳理工学院实验报告
系别
计算机系
班级
B120503
学号
B12050316
姓名
段浴
课程名称
计算机网络
实验日期
2014/11/8
实验名称
简单的客户/服务器程序设计与实现
成绩
实验目的:
1、熟悉MicrosoftVisualStudio2008编程环境。
2、了解TCP与UDP协议,以及它们之间的区别。
3、了解客户/服务器模型原理。
4、熟悉Socket编程原理,掌握简单的套接字编程。
实验条件:
硬件:
PC机(两台以上)、网卡、已经设定好的以太网环境
软件:
MicrosoftVisualStudio2008
实验原理:
1、编写用TCP协议实现的Client端和Server端程序并调试通过。
客户方
程序分两部分:
客户程序和服务器程序。
工作过程是:
服务器首先启动,它创建套接字之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。
或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。
2、编写用UDP协议实现的Client端和Server端程序并调试通过(做完第一个实验的基础上做该实验)。
服务器方
客户方
3、编写用TCP协议实现Client端与Server端的一段对话程序。
Server端根据用户的输入来提示Client端下一步将要进行操作。
实验内容:
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==(sock1=:
:
socket(AF_INET,SOCK_STREAM,0)))
perror("Createsocketerror!
");
my_addr.sin_family=AF_INET;
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("Acceptinganewconnet:
%s",inet_ntoa(their_addr.sin_addr));
}
//选择菜单
intmenu()
{
char*s=(char*)malloc(2*sizeof(char));
intc;
printf("\n\n\nServer:
Menu\n\n\n");
printf("*********************************\n\n");
printf("*1.SendMessage*\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);
:
:
WSACleanup();
}
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==(sock1=:
:
socket(AF_INET,SOCK_STREAM,0)))
perror("Createsocketerror!
");
my_addr.sin_family=AF_INET;
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);
}
}
//选择菜单
intmenu()
{
char*s=(char*)malloc(2*sizeof(char));
intc;
printf("\n\n\nClient:
Menu\n\n\n");
printf("*********************************\n\n");
printf("*1.SendMessage*\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(sock1,Msg,strlen(Msg),0);
}
//消息接收函数
voidReceive()
{
intlen;
charbuf[10240];
for(inti=0;i<10240;i++){
buf[i]='\0';
}
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: