




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
洛阳理工学院实验报告系别计算机系班级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()返回,得到新的套接字,scsend()/recv(),在套接字上读/写数据,直到数据交换完recvt()/send(),在套接字sc上读/写数据,直到数据交换完毕closesocket(),关闭套接字结束TCP对话closesocket(),关闭最初套接字s,服务结束closesocket(),关闭套接字sc程序分两部分:客户程序和服务器程序。工作过程是: 服务器首先启动,它创建套接字之后等待客户的连接;客户启动后创建套接字,然后和服务器建立连接;建立连接后,客户接收键盘输入,然后将数据发送到服务器,服务器收到到数据后,将接收到的字符在屏幕上显示出来。或者服务器接收键盘输入,然后将数据发送到客户机,客户机收到数据后,将接收到的字符在屏幕上显示出来。 2、编写用UDP协议实现的Client端和Server端程序并调试通过(做完第一个实验的基础上做该实验)。服务器方客户方Socket()建立流式套接字,返回套接字号。Socket(),建立流失套接字,返回套接字号bind(),套接字s与本地地址相连。将套接字与远地主机连接send()/recv(),在套接字上读/写数据,直到数据交换完recvt()/send(),在套接字上读/写数据,直到数据交换完毕closesocket(),关闭套接字结束UDP对话closesocket(),关闭套接字3、编写用TCP协议实现Client端与Server端的一段对话程序。Server端根据用户的输入来提示Client端下一步将要进行操作。实验内容: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 name20;/初始化函数Tcpvoid Init() printf(nnn Server: TCPnnn);/建立套接字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);/接受连接printf( Ready to serve client. Please connect.nnn);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(nnn Server: Menunnn);printf( *nn);printf( * 1.Send Message *n);printf( * 2.Receive Message *n);printf( * 3.Exit *nn);printf( *n);doprintf(n Enter your choice:);gets(s);if(s0=0)gets(s);c=atoi(s);while(c3);free(s);return c;/消息发送函数void Send()char Msg10240;printf(nPlease Input the message:);gets(Msg); Msg10239=0; :send(sock2,Msg,strlen(Msg),0);/消息接收函数void Receive()int len;char buf10240;for(int i=0;i10240;i+)bufi=0; if(len=:recv(sock2,buf,10240,0)=-1)perror(Receving data error);exit(1);printf(The Received Message:%sn,buf);/主函数void main() Init();for(;)switch(menu()case 1:Send();break;case 2:Receive();break;case 3:exit(0);/:closesocket(sock2);:closesocket(sock1);: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 name20;/初始化函数Tcpvoid Init() printf(nnn Client: TCPnnn);/建立套接字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);/选择菜单int menu()char *s=(char*)malloc(2*sizeof(char);int c;printf(nnn Client: Menunnn);printf( *nn);printf( * 1.Send Message *n);printf( * 2.Receive Message *n);printf( * 3.Exit *nn);printf( *n);doprintf(n Enter your choice:);gets(s);if(s0=0)gets(s);c=atoi(s);while(c3);free(s);return c;/消息发送函数void Send() char Msg10240;printf(nPlease Input the message:);gets(Msg); Msg10239=0; :send(sock1,Msg,strlen(Msg),0); /消息接收函数void Receive()int len;char buf10240;for(int i=0;i10240;i+)bufi=0; if(len=:recv(sock1,buf,10240,0)=-1)perror(Receving data error);exit(1);printf(The Received Message:%sn,buf);/主函数void main() Init();for(;)switch(menu()case 1:Send();break;case 2:Receive();break;case 3:exit(0);:closesocket
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2019-2025年中国清香型白酒行业市场调研分析及投资战略咨询报告
- 小学生传统游戏课件
- 中国键合铜丝行业市场调查报告
- 二手车经纪人技能测试题库及答案
- 含氮硅油项目投资可行性研究分析报告(2024-2030版)
- 电机线圈制造工上岗证考试题库及答案
- 温度环境试验工理论学习手册练习试题及答案
- 清洗机项目可行性分析报告范文模板
- 工艺品雕刻工(木雕工)安全技术操作规程
- 电缆辐照工上岗证考试题库及答案
- 急性中毒的治疗与护理
- 2025年乐理考试真题解析试题及答案
- 收益法评估企业价值操作指导意见试行
- 《teamLab无界美术馆(上海)的运营模式分析案例》7200字
- 电梯基础知识培训(结构及原理)
- 尘肺病诊断试题及答案
- 申能集团校招测评都有什么内容
- 劳务合同完整版(2025年版)
- 2022款奥迪a4l使用说明书
- 眼科院感培训
- 骨科常用支具的使用及护理
评论
0/150
提交评论