


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
------------word------------word-------------云南大学软件学院实验报告课程: 计算机网络原理实验 任课教师: 金姓名: 学号:2016 专业:软件工程成绩:实验目的:
实验三、套接字编程两人一组,编写一个客户端、服务器程序,掌握Socket编程原理。实验环境:连入局域网络的主机一台。实验指导:SocketAPI是实现进程间通信的一种编程设施,也是一种为进程间提供底层抽象的机制。理解socket编程模型及其原理。实验分析,回答下列问题。运行指导书中的程序,并回答下列问题:winsock2.h文件?答:winsock2.h是头文件,声明了在C/C++下进行Winsock编程需要的函数,结构等内容.是提供给编译器用的。以此来提供自带程序库。为什么在服务器和客户端程序中要加入#pragmacomment(lib,"ws2_32.lib")语句,如果不加会出现什么问题?答:表示链接Ws2_32.lib这个库,否则就无法使用Ws2_32.lib库。WSAStartup函数,如果不用程序会有什么问题?Socket版本来搜索相应的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。如果不调用就无法完成上述功能。如果先运行客户端程序,程序会有什么现象,为什么会有这一现象?答:客户端闪退,没有建立套接口连接。如果服务器程序所在计算机没有连接网络,程序会发生什么错误?我们捕获到什么错误信息?答:内容不能够发出去,服务器不接收文件,发生错误。服务器端程序中“SOCKETsock,msgsock;”这句为什么要定义两个套接字变量?答:一个是初始就没有的,另一个是客户端建立连接时分配的,目的是为了多台电脑连接时发生连接冲突。修改服务器和客户端程序代码实现基本交互的功能(自己思考源代码)。客户端:#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")#definePORT3490/*客户机连接远程主机的端口*/#defineMAXDATASIZE100/*每次可以接收的最大字节*/int_tmain(intargc,_TCHAR*argv[]){WORD wVersionRequested;WSADATA wsaData;int err=0,rval=0;SOCKET fd;structsockaddr_inservaddr;structhostent* hp;char buf[1024]="",*a="服务器连接已关闭wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0)return-1;if((fd=socket(AF_INET,SOCK_STREAM,0))<0){printf("Cannotcreatesocket!");exit(2);}servaddr.sin_family=AF_INET;servaddr.sin_port=servaddr.sin_addr.S_un.S_addr=inet_addr("113.55.16.17");memset(servaddr.sin_zero,0,sizeof(servaddr.sin_zero));//和服务器创建连接rval=connect(fd,(sockaddr*)&servaddr,sizeof(servaddr));if(rval<0){//创建连接失败printf("Cannotcreateconnect!");exit(3);}else{for(;;){memset(buf,0,1024);printf("请向服务器端发送消息:");scanf("%s",&buf);//向服务器发送信息rval=send(fd,buf,strlen(buf)+1,0);if(rval<0)printf("Writeerror!");if((rval=recv(fd,buf,sizeof(buf),0)<0))perror("readingstreammessage");if(rval==0){printf("收到服务器的消息:%s\n",buf);if(strcmp(buf,a)==0){printf("关闭连接,请输入任意字符退出");fflush(stdin);getchar();closesocket(fd);exit(1);}}/*if(rval==)*/}}closesocket(fd);exit(5);return0;}服务器端://1.c.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<winsock2.h>#pragmacomment(lib,"ws2_32.lib")#defineMYPORT 3490/*定义用户连接端口*/#defineBACKLOG 10/*多少等待连接控制*/#defineSERVER_IP_ADDR"113.55.16.17" /*服务器的IP*/int_tmain(int{argc,_TCHAR*argv[])SOCKETsock,msgsock;intlength=0;structsockaddr_inserver;structsockaddr char buf[1024]=int rval=0,len=0,err=0;WORD wVersionRequested;WSADATA wsaData;/*指定socketsocketsocketbind*/wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0)return-1;/*建立套接字*/sock=socket(AF_INET,SOCK_STREAM,0);if(sock<0){perror("openingstreamsocket");exit(1);}/*使用任意端口命名套接字*/server.sin_family=AF_INET;server.sin_port=htons(MYPORT);server.sin_addr.s_addr=inet_addr(SERVER_IP_ADDR);memset(server.sin_zero,0,sizeof(server.sin_zero));//将服务器地址与socket绑定在一起rval=bind(sock,(structsockaddr*)&server,sizeof(server));if(rval<0){perror("bindingstreamsocket");exit(1);}//找出指定的端口号并打印出来length=sizeof(server);if(getsockname(sock,(structsockaddr*)&server,&length)<0){perror("gettingsocketname");exit(1);}printf("socketport#%d\n",ntohs(server.sin_port));//开始接收连接,最大请求数为listen(sock,5);len=sizeof(structsockaddr);do{ msgsock=accept(sock,(structsockaddr*)&tcpaddr,(int*)&len);if(msgsock==-1)perror("accept");elsewhile(1){ memset(buf,0,sizeof(buf));if((rval=recv(msgsock,buf,sizeof(buf),0)<0))perror("readingstreammessage");if(rval==0){if(buf[0]=='#'){printf("收到连接结束字符,连接结束,按任意键退出");rval=send(msgsock,buff,strlen(buff)+1,0);closesocket(msgsock);getchar();getchar();exit(0);}elseprintf("收到消息:%s\n",buf);}memset(buf,0,1024);printf(scanf("%s",&buf);rval=send(msgsock,buf,strlen(buf)+1,0);if(rval<0)printf("Writeerror!");}closesocket(msgsock);}while(TRUE);/*因为这个程序已经有了一个无限循环,所以套接字"sock"从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/closesocket(msgsock);return0;}给出修改代码后的服务器端和客户端的程序流程图。服务器服务器Sock,msgsock=Socket()Sock,msgsock=Socket()()Bind(msgsock)Listen(msgsock)客户端msgsock=Accept
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年营养师资格证关注点与试题答案
- 2024年营养师变化趋势试题及答案
- 实践教学与营养师试题及答案
- 食品营养强化技术试题及答案
- 营养师资格证知识点专题试题
- 营养师客户沟通试题及答案
- 具体实例营养师资格证试题及答案2024
- 2024年营养师资格证备考指南及试题答案
- 助力成功的营养师试题及答案
- 2025导游证资格考试全面理解试题及答案
- 如何做好护理实习生的带教
- 2025年安徽职业技术学院单招职业适应性考试题库含答案
- 2024大模型安全研究报告
- 2025年安徽审计职业学院单招职业技能测试题库附答案
- 2025河南中烟许昌卷烟厂招聘10人易考易错模拟试题(共500题)试卷后附参考答案
- 2020年国际命名化妆品原料INCI英汉对照名称
- 四川省自贡市2024-2025学年八年级上学期期末考试道德与法治试题(含答案)
- 2025年高考数学二级结论篇(核心知识背记手册)-专项训练
- 2025年人物精神创作指南:展现独特个性和价值观
- 《1844年经济学哲学手稿》原文
- 医药行业扭亏专项措施方案
评论
0/150
提交评论