实验七简单的服务器客户端程序实验报告.docx

上传人:b****6 文档编号:4719748 上传时间:2022-12-07 格式:DOCX 页数:17 大小:193.29KB
下载 相关 举报
实验七简单的服务器客户端程序实验报告.docx_第1页
第1页 / 共17页
实验七简单的服务器客户端程序实验报告.docx_第2页
第2页 / 共17页
实验七简单的服务器客户端程序实验报告.docx_第3页
第3页 / 共17页
实验七简单的服务器客户端程序实验报告.docx_第4页
第4页 / 共17页
实验七简单的服务器客户端程序实验报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

实验七简单的服务器客户端程序实验报告.docx

《实验七简单的服务器客户端程序实验报告.docx》由会员分享,可在线阅读,更多相关《实验七简单的服务器客户端程序实验报告.docx(17页珍藏版)》请在冰豆网上搜索。

实验七简单的服务器客户端程序实验报告.docx

实验七简单的服务器客户端程序实验报告

系别

计算机系

班级

B120503

学号

B12050316

姓名

段浴

课程名称

计算机网络

实验日期

2014/11/8

实验名称

简单的客户 /服务器程序设计与实现

成绩

实验目的:

1、熟悉 Microsoft Visual Studio 2008 编程环境。

2、了解 TCP 与 UDP 协议,以及它们之间的区别。

3、了解客户/服务器模型原理。

4、熟悉 Socket 编程原理,掌握简单的套接字编程。

实验条件:

硬件:

PC 机(两台以上)、网卡、已经设定好的以太网环境

软件:

Microsoft Visual Studio 2008

实验原理:

1、编写用 TCP 协议实现的 Client 端和 Server 端程序并调试通过。

Socket()建立流式套接字,返回套接字号。

客户方

bind(),套接字 s 与本地地址相连。

                                                 Socket(),建立流失套接字,

listen(),通知 TCP,服务器准备好接收连接。

                                                   返回套接字号

accept(),接受连接,等待客户端的连接...                                           connect(),将套接字 s 与远

地主机连接

连接建立,accept()返回,得到新的套接字,sc

recvt()/send(),在套接字 sc 上读/写数据,直到                                         send()/recv(),在套接字上读

数据交换完毕                                                                      /写数据,直到数据交换完

closesocket(),关闭套接字 sc                                                           closesocket(),关闭套接字

结束 TCP 对话

closesocket(),关闭最初套接字 s,服务结束

洛阳理工学院 实验报告

1 / 10

程序分两部分:

客户程序和服务器程序。

工作过程是:

 服务器首先启动,它创建套接字之后等待客户的连接;客户启动后

创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将

数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。

或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接

收到的字符在屏幕上显示出来。

2、编写用 UDP 协议实现的 Client 端和 Server 端程序并调试通过(做完第一个实验的

基础上做该实验)。

服务器方客户方

 

Socket()建立流式套接字,返回套接字号。

 

bind(),套接字 s 与本地地址相连。

 

recvt()/send(),在套接字上读/写数据,直到数据

交换完毕

 

closesocket(),关闭套接字

Socket(),建立流失套接字,

返回套接字号

 

将套接字与远地主机连接

 

send()/recv(),在套接字上读

/写数据,直到数据交换完

 

closesocket(),关闭套接字

结束 UDP 对话

 

3、编写用 TCP 协议实现 Client 端与 Server 端的一段对话程序。

Server 端根据用户的

输入来提示 Client 端下一步将要进行操作。

 

2 / 10

实验内容:

Sever 端代码:

// server.cpp :

 定义控制台应用程序的入口点。

#include 

#include 

#include 

#include 

#pragma comment(lib, "WS2_32")

SOCKET sock1,sock2;

int sin_size ;

struct sockaddr_in my_addr,their_addr;

char name[20];

//初始化函数 Tcp

void Init()

{

printf("\n\n\nServer:

 TCP\n\n\n");

//建立套接字

const WORD wMinver=0x0101;

WSADATA wsadata;

if(0!

=:

:

WSAStartup(wMinver,&wsadata))

perror("Start socket error!

");

if(INVALID_SOCKET==(sock1=:

:

socket(AF_INET,SOCK_STREAM,0)))

perror("Create socket error!

");

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,(struct sockaddr*)&my_addr,sizeof(my_addr)))

{

perror("Binding stream socket");

exit

(1);

}

//开始侦听

if(SOCKET_ERROR==:

:

listen(sock1,5))

{

perror("Listening stream socket");

exit

(1);

3 / 10

}

//接受连接

printf("Ready to serve client. Please connect...\n\n\n");

sin_size = sizeof(struct sockaddr_in);

if((sock2=accept(sock1,(struct sockaddr *)&their_addr,&sin_size))==-1)

{

perror("Accepting stream socket");

exit

(1);

}

printf("Accepting a new connet:

%s",inet_ntoa(their_addr.sin_addr));

}

//选择菜单

int menu()

{

char *s=(char*)malloc(2*sizeof(char));

int c;

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("\nEnter your choice:

");

gets(s);

if(s[0]=='\0'){

gets(s);

}

c=atoi(s);

}while(c<0||c>3);

free(s);

return c;

}

 

//消息发送函数

void Send()

{

char Msg[10240];

printf("\nPlease Input the message:

");

gets(Msg);

Msg[10239]='\0';

4 / 10

:

:

send(sock2,Msg,strlen(Msg),0);

}

//消息接收函数

void Receive()

{

int len;

char buf[10240];

for(int i=0;i<10240;i++){

buf[i]='\0';

}

 

if((len=:

:

recv(sock2,buf,10240,0))==-1)

{

perror("Receving data error");

exit

(1);

}

printf("The Received Message:

%s\n",buf);

 

}

//主函数

void main()

{

Init();

for(;;)

{

switch(menu())

{

case 1:

Send();

break;

case 2:

Receive();

break;

case 3:

exit(0);

}

}

//:

:

closesocket(sock2);

:

:

closesocket(sock1);

5 / 10

:

:

WSACleanup();

}

Client 端代码:

// client.cpp :

 定义控制台应用程序的入口点。

//

#include 

#include 

#include 

#include 

#pragma comment(lib, "WS2_32")

SOCKET sock1,sock2;

int sin_size ;

struct sockaddr_in my_addr,their_addr;

char name[20];

//初始化函数 Tcp

void Init()

{

printf("\n\n\nClient:

 TCP\n\n\n");

//建立套接字

const WORD wMinver=0x0101;

WSADATA wsadata;

if(0!

=:

:

WSAStartup(wMinver,&wsadata))

perror("Start socket error!

");

if(INVALID_SOCKET==(sock1=:

:

socket(AF_INET,SOCK_STREAM,0)))

perror("Create socket error!

");

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(struct sockaddr_in);

if(sock2=(:

:

connect(sock1,(LPSOCKADDR)&my_addr,sin_size))==-1)

{

perror("Accepting stream socket");

exit

(1);

}

}

6 / 10

//选择菜单

int menu()

{

char *s=(char*)malloc(2*sizeof(char));

int c;

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("\nEnter your choice:

");

gets(s);

if(s[0]=='\0'){

gets(s);

}

c=atoi(s);

}while(c<0||c>3);

free(s);

return c;

}

//消息发送函数

void Send()

{

char Msg[10240];

printf("\nPlease Input the message:

");

gets(Msg);

Msg[10239]='\0';

:

:

send(sock1,Msg,strlen(Msg),0);

}

//消息接收函数

void Receive()

{

7 / 10

int len;

char buf[10240];

for(int i=0;i<10240;i++){

buf[i]='\0';

}

if((len=:

:

recv(sock1,buf,10240,0))==-1)

{

perror("Receving data error");

exit

(1);

}

printf("The Received Message:

%s\n",buf);

 

}

//主函数

void main()

{

Init();

for(;;)

{

switch(menu())

{

case 1:

Send();

break;

case 2:

Receive();

break;

case 3:

exit(0);

}

}

:

:

closesocket(sock2);

:

:

closesocket(sock1);

:

:

WSACleanup();

}

 

8 / 10

实验结果

Server 端界面:

发送信息

 

Server 端界面:

接收信息

 

9 / 10

实验总结

 

在老师的精心指导和自己的努力下最终成功完成了本次的实验内容,虽然在

过程中遇到好多问题,在老师和同学们的帮助下最后顺利完成。

在此试验中通过

老师的讲解和自己的动手操作, 通过本次实验我了解了一些 路由器的基本配置 ,

也学会使用了 子网划分的一些基本知识 ,对计算机网络的学习更加感兴趣。

 

10 / 10

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

当前位置:首页 > PPT模板 > 节日庆典

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

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