




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生活污水培训课件
- 培训制度体系建设
- 借调人员转正政策解读
- 2026届娄底市重点中学九年级化学第一学期期末学业水平测试试题含解析
- 2026届郑州市金水区英语九上期末考试试题含解析
- 2026届重庆市巴南区全善学校化学九年级第一学期期末达标测试试题含解析
- 河南省新乡市第七中学2026届九年级英语第一学期期末复习检测试题含解析
- 江西省抚州市金溪县2026届化学九上期中监测模拟试题含解析
- 2026届山东省滨州市名校化学九上期中联考模拟试题含解析
- 2026届吉林省长春市第108中学九年级化学第一学期期末联考模拟试题含解析
- 英语四级+六级词汇大全(带音标)
- 《透视画法基础:艺术绘画基础课程教案》
- 社会治安综合治理中心规范化建设推进会
- 全套设备安装施工记录表
- 质量保证部三年发展规划
- 2025年消防执业资格考试题库(专业技能提升题)-实操技能模拟试题
- GB/T 15180-2025重交通道路石油沥青
- 湖南信息职业技术学院2025年单独招生考试文化素质测试考试大纲
- 大学新生专业思想教育
- 三叉神经鞘瘤护理查房
- 母婴护理服务方案
评论
0/150
提交评论