




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
系别计算机系班级B120503学号B12050316姓名段浴课程名称计算机网络实验日期2014/11/8实验名称简单的客户/服务器程序设计与实现成绩实验目的:1、熟悉MicrosoftVisualStudio2008编程环境。2、了解TCP与UDP协议,以及它们之间的区别。3、了解客户/服务器模型原理。4、熟悉Socket编程原理,掌握简单的套接字编程。实验条件:硬件:PC机(两台以上)、网卡、已经设定好的以太网环境软件:MicrosoftVisualStudio2008实验原理:1、编写用TCP协议实现的Client端和Server端程序并调试通过。Socket()建立流式套接字,返回套接字号。客户方bind(),套接字s与本地地址相连。Socket(),建立流失套接字,listen(),通知TCP,服务器准备好接收连接。返回套接字号accept(),接受连接,等待客户端的连接connect(),将套接字s与远地主机连接连接建立,accept()返回,得到新的套接字,screcvt()/send(),在套接字sc上读/写数据,直到send()/recv(),在套接字上读数据交换完毕/写数据,直到数据交换完closesocket(),关闭套接字scclosesocket(),关闭套接字结束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#pragmacomment(lib,WS2_32)SOCKETsock1,sock2;intsin_size;structsockaddr_inmy_addr,their_addr;charname20;/初始化函数TcpvoidInit()printf(nnnServer:TCPnnn);/建立套接字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);3/10/接受连接printf(Readytoserveclient.Pleaseconnect.nnn);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(nnnServer:Menunnn);printf(*nn);printf(*1.SendMessage*n);printf(*2.ReceiveMessage*n);printf(*3.Exit*nn);printf(*n);doprintf(nEnteryourchoice:);gets(s);if(s0=0)gets(s);c=atoi(s);while(c3);free(s);returnc;/消息发送函数voidSend()charMsg10240;printf(nPleaseInputthemessage:);gets(Msg);Msg10239=0;4/10:send(sock2,Msg,strlen(Msg),0);/消息接收函数voidReceive()intlen;charbuf10240;for(inti=0;i10240;i+)bufi=0;if(len=:recv(sock2,buf,10240,0)=-1)perror(Recevingdataerror);exit(1);printf(TheReceivedMessage:%sn,buf);/主函数voidmain()Init();for(;)switch(menu()case1:Send();break;case2:Receive();break;case3:exit(0);/:closesocket(sock2);:closesocket(sock1);5/10:WSACleanup();Client端代码:/client.cpp:定义控制台应用程序的入口点。/#include#include#include#include#pragmacomment(lib,WS2_32)SOCKETsock1,sock2;intsin_size;structsockaddr_inmy_addr,their_addr;charname20;/初始化函数TcpvoidInit()printf(nnnClient:TCPnnn);/建立套接字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);6/10/选择菜单intmenu()char*s=(char*)malloc(2*sizeof(char);intc;printf(nnnClient:Menunnn);printf(*nn);printf(*1.SendMessage*n);printf(*2.ReceiveMessage*n);printf(*3.Exit*nn);printf(*n);doprintf(nEnteryourchoice:);gets(s);if(s0=0)gets(s);c=atoi(s);while(c3);free(s);returnc;/消息发送函数voidSend()charMsg10240;printf(nPleaseInputthemessage:);gets(Msg);Msg10239=0;:send(sock1,Msg,strlen(Msg),0);/消息接收函数voidReceive()7/10intlen;charbuf10240;for(inti=0;i10240;i+)bufi=0;if(len=:recv(sock1,buf,10240,0)=-1)perror(Recevingdataerror);exit(1);printf(TheReceivedMessage:%sn,buf);/主函数voidmain()Init();for(;)switch(menu()case1:Send();break;case2:Receive();break;case3:exit(0);:closesocket(sock2);:clos
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年血液透析器项目申请报告
- 2025年美发师(高级)考试试卷:美发行业市场调研与竞争对手分析
- 2025年电脑提花人造毛皮机项目立项申请报告
- 我的宠物生活写物并抒情类作文14篇
- 2025年电工(高级技师)职业技能鉴定实操试卷:电气自动化技术技能案例分析
- 2025年安全生产管理工程师模拟试题
- 家庭经济情况与收入支出平衡证明(8篇)
- 清(梅)酒介绍试题
- 2025年旅游地产项目生态旅游规划与设计策略研究
- 2025年城市生活垃圾分类处理创新实践与公众教育体系研究报告001
- 河流冲刷计算公式(在黄色的格内填入数据即可)
- 2024年全国《汽车加气站操作工》安全基础知识考试题库与答案
- 胰岛素注射 课件
- 公司事故隐患内部报告奖励机制
- 【教育数字化应用案例】初中物理教育数字化应用案例
- 北京市西城区2021-2022学年八年级下学期期末历史试题(试题+答案)
- 贵州省铜仁市2023-2024学年七年级下学期期末生物试题(解析版)
- 供应商定期评价表(精简版)
- HJ 620-2011 水质 挥发性卤代烃的测定 顶空气相色谱法
- 广西壮族自治区桂林市2023-2024学年七年级下学期期末考试数学试题
- 企业所得税汇算清缴申报表电子表格版(带公式-自动计算)
评论
0/150
提交评论