




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计师证书考试的职业素养提升试题及答案
- 中学生艾滋病知识普及课件
- 驿站合伙合同协议书
- 纺织工程师证书考试解析中的关键试题及答案
- 废旧门窗回收合同协议书
- 《跨国物流操作》课件
- 合同协议书范文
- 合同毁约协议书
- 爱情合同协议书
- 退款合同协议书
- 人工智能在新闻中的应用
- (高清版)TDT 1015.1-2024 地籍数据库 第1部分:不动产
- CJT156-2001 沟槽式管接头
- 民宿承包合同协议书样本
- 幼小衔接 每日一练
- 哈尔滨市木兰县文职辅警招聘考试真题
- 烈士陵园智慧管理系统
- 室上速心动过速治疗
- 铸就数字坚盾:网络安全技术智慧树知到期末考试答案章节答案2024年青岛工学院
- 芦丁鸡怎么养
- 幽门螺杆菌预防措施及治疗
评论
0/150
提交评论