南京工程学院电力工程学院2014/2015学年第1学期实验报告课程名称计算机网络与现场总线实验项目名称基于UDP的用户网络通信程序实验学生班级实验学生姓名实验时间2014.11.27实验地点工程实践中心9-229实验报告成绩:评阅教师签字:年月日2电力工程学院二O一四年说明1.实验报告为实验的重要考核依据之一,每个实验必须定一份实验报告.本实验报告原则上要求手写。2.本实验报告各项内容的具体格式、字数可由指导教师根据实验具体情况提出具体要求。各项内容可另附页,为便于归档,附页尺寸不得大于本实验报告尺寸,并注意粘牢于附页粘贴处。3.实验报告封面中的“实验名称”应为实验教学大纲上所列的规范名称,“实验地点”应写出实验室的具体名称。请确认无误后再填写。4.实验报告的建议格式为:一、实验目的和要求;二、主要实验仪器和设备;三、本次实验内容(一)实验项目名称(按本次实验各项目填写)1、原理或接线图2、实验步骤及注意事项3、实验预习过程中所遇到问题……四、实验记录及数据处理(主要内容包括实验具体实施步骤、实验原始数据、计算过程与结果、数据曲线、图表等。具体格式按指导教师要求)五、实验结论(主要内容包括本实验小结、实验体会或疑问等。具体格式按指导教师要求)5.实验成绩由实验预习、实验表现、实验报告三部分组成。其中前两项各占总成绩的30%。实验报告成绩依据报告的科学性、全面性、规范性及书写态度综合考核。实验报告采用百分制,占实验总成绩的40%,教师请阅本报告后需签字并给出实验报告百分制成绩。6.实验报告需按要求时间以班级为单位交给指导教师,最长时间不得超过两周,实验报告如有明显抄袭者或不交者,实验总评成绩按0分记。3一、实验目的了解Socket编程接口,熟悉高级语言访问基于UDP的网络的语句,学习用户网络应用程序的编程方法。二、实验环境1.联网的计算机2台2.VB或VC软件三、基础知识(查找资料关于Socket编程、UDP的工作原理)在Internet网络中,目前普遍采用了客户/服务器模式,即服务器被动接受客户请求,并将有关结果返回给客户。服务器提供服务,客户消耗服务。利用Socket编程接口,服务器和客户通信过程:服务器先初始化Socket,然后与端口绑定,等待客户端连接。这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接。代码如下:#includewinsock2.h#includestdio.hBOOLInitWinsock();voidmain(){SOCKETsocket1;InitWinsock();structsockaddr_inserver;intlen=sizeof(server);server.sin_family=AF_INET;server.sin_port=htons(1000);///server的监听端口server.sin_addr.s_addr=inet_addr(192.168.0.30);///server的地址socket1=socket(AF_INET,SOCK_DGRAM,0);4while(1){charbuffer[1024]=\0;printf(inputmessage\n);scanf(%s,buffer);if(strcmp(buffer,bye)==0)break;if(sendto(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&server,len)!=SOCKET_ERROR){if(recvfrom(socket1,buffer,sizeofbuffer,0,(structsockaddr*)&server,&len)!=SOCKET_ERROR)printf(recefromserver:%s\n,buffer);}}closesocket(socket1);}BOOLInitWinsock(){intError;WORDVersionRequested;WSADATAWsaData;VersionRequested=MAKEWORD(2,2);Error=WSAStartup(VersionRequested,&WsaData);//启动WinSock2if(Error!=0){returnFALSE;5}2、画出客户端服务器端程序框图。3、对整个实验过程进行总结,完成实验报告。本次试验两个人一组,将两个人的计算机一个作为主机,一个作为服务器,主机提供请求,服务器回应请求,从而实现两机通信。虽然只是简单地了解但我们熟悉了两台计算机实现通信的基本原理并对其有了一定的掌握,对我们以后的学习有了很大的帮助。Socket()Socket()bind()recvfrom()sendto)bind()sendto)recvfrom()close()等待客户服务请求处理服务请求UDP客户UDP服务器服务请求服务应答6}else{if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2){WSACleanup();returnFALSE;}}returnTRUE;}四、实验内容及要求要求2人一组,使用VB或VC设计采用UDP协议实现2机通信。五、思考题1、、请总结在实验中遇到的问题及其解决办法?发送后接收端无法收到信息,端口被占用,更换端口后实验成功,接受不成功也可7能是防火墙没有关闭。