实验报告udp多播编程_第1页
实验报告udp多播编程_第2页
实验报告udp多播编程_第3页
实验报告udp多播编程_第4页
实验报告udp多播编程_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程网络协议编 实验名称UDP多播编 班级7 专业计算机科学与技术学号 实验日期:2015年4月14日报告退发(订正、重做) WindowsSocket(UDP)WindowsSocketAPIUDP据,ReceiverSenderVisualC++6.0,Win7#include<windows.h>#include<winsock.h>#pragma#include<stdio.h>#include<stdlib.h>#defineMCASTADDR "234.5.6.7"//缺省多播组地址#defineMCASTPORT #defineBUFSIZE BOOLbSender=FALSE, //Actassender?bLoopBack=FALSE; //Disableloopback?DWORDdwInterface, //Localinterfacetobindto //Multicastgrouptojoin //Numberofmessagestosend/receiveshort //Portnumberto//Function:// Printusageinformationandvoidusage(char{printf("usage:%s-s-m:str-p:int-i:str-l-n:int\n",printf("-s Actasserver(senddata);otherwise\n"); receivedata.\n");printf("-m:strDotteddecimalmulticastIPaddrestojoin\n"); Thedefaultgroupis:%s\n",MCASTADDR);printf("-p:intPortnumbertoprintf("Thedefaultportis:%d\n",MCASTPORT);printf("-i:strLocalinterfacetobindto;bydefault\n");printf("useINADDRY_ANY\n");printf("- Disableprintf("-n:intNumberofmessagestosend/receive\n");}//Function:// Parsethecommandlineargumentsandsetsomeglobal dependingonthevoidValidateArgs(intargc,char**argv)//{ dwInterface=iPort=MCASTPORT;dwCount=for(i=1;i<argc;{if((argv[i][0]=='-')||(argv[i][0]=={switch{case's': //SenderbSender=TRUE;case'm': //Multicastgrouptojoinif(strlen(argv[i])>3)dwMulticastGroup=inet_addr(&argv[i][3]);case'i': //Localinterfacetouseif(strlen(argv[i])>3)dwInterface=inet_addr(&argv[i][3]);case'p': //Portnumbertouseif(strlen(argv[i])>3)iPort=atoi(&argv[i][3]);case'l': //Disableloopback?bLoopBack=TRUE;case'n': //Numberofmessagestosend/recvdwCount=atoi(&argv[i][3]);}}}}//Function:// Parsethecommandlinearguments,loadtheWinsock createasocketandjointhemulticastgroup.Ifthis isstartedasasenderthenbeginsendingmessagesto multicastgroup;otherwise,callrecvfrom()toread senttotheintmain(intargc,char{ structsockaddr_instructip_mreq len=sizeof(structsockaddr_in), //Parsethecommandlineandload//Winsock1.1if(WSAStartup(MAKEWORD(1,1),&wsd)!={return-1;}//Createthesocket.InWinsock1youdon'tneedany//flagstoindicateif((sockM=socket(AF_INET,SOCK_DGRAM,0))=={printf("socketfailedwith:%d\n",WSAGetLastError());return-}if(!bSender){local.sin_family=local.sin_port=if(bind(sockM,(structsockaddr*)&local,sizeof(local))==SOCKET_ERROR){printf("bindfailedwith:%d\n",WSAGetLastError());return-1;}}//Setuptheim_reqstructuretoindicatewhatgroupwe//tojoinaswellasthe =htons(iPort);//im_reqmcast.imr_interface.s_addr=dwInterface;(char*)&mcast,sizeof(mcast))==SOCKET_ERROR){printf("setsockopt(IP_ADD_MEMBERSHIP)failed:%d\n",return-}//SettheTTLtosomethingelse.ThedefaultTTLisliveTTL,//每当有路由器转发该报文时,TTL文//即使没有到达目的地,也立即宣布optval=(char*)&optval,sizeof(int))==SOCKET_ERROR){return-}//Disabletheloopbackifselected.NotethatonNT4and//youcannotdisableif{optval=(char*)&optval,sizeof(optval))==SOCKET_ERROR){return-}}if // //Receivesomefor(i=0;i<dwCount;{if((ret=recvfrom(sockM,recvbuf,BUFSIZE,(structsockaddr*)&from,&len))=={printf("recvfromfailedwith:%d\n",return-1;}recvbuf[ret]=printf("RECV:'%s'from<%s>\n",recvbuf,}} //{//Sendsomefor(i=0;i<dwCount;{sprintf(sendbuf,"server1:Thisisatest:%d",if(sendto(sockM,(char*)sendbuf,strlen(sendbuf),0,(structsockaddr*)&remote,sizeof(remote))=={printf("sendtofailedwith:return-}}}//Dropgroup(char*)&mcast,sizeof(mcast))==SOCKET_ERROR){printf("setsockopt(IP_DROP_MEMBERSHIP)failed:%d\n",}return0;}#include<winsock2.h>#include#pragma#include<stdio.h>#include<stdlib.h>#defineMCASTADDR #defineMCASTPORT #define BOOLbSender=FALSE, //Actasasender?bLoopBack= //DisableDWORDdwInterface, //绑定的本地接口 //连接的多播组 short //使用的端//Function:// Printusageinformationandvoidusage(char{printf("usage:%s-s-m:str-p:int-i:str-l-n:int\n",printf("-s Actasserver(senddata);otherwise\n"); receivedata.\n");printf("-m:str DotteddecimalmulticastIPaddres""tojoin\n"); Thedefaultgroupis:%s\n",MCASTADDR);printf("-p:int Portnumbertouse\n"); Thedefaultportis:%d\n",MCASTPORT);printf("-i:str Localinterfacetobindto;bydefault\n"); useINADDRY_ANY\n");printf("- Disableprintf("-n:int Numberofmessagestosend/receive\n");}voidValidateArgs(intargc,char**argv)//{ dwInterface=iPort=MCASTPORT;dwCount=for(i=1;i<argc{if((argv[i][0]=='-')||(argv[i][0]=={switch{case's'://SenderbSender=TRUE;case'm'://Multicastgrouptojoinif(strlen(argv[i])>3)dwMulticastGroup=inet_addr(&argv[i][3]);case'i'://Localinterfacetouseif(strlen(argv[i])>3)dwInterface=inet_addr(&argv[i][3]);case'p'://Porttouseif(strlen(argv[i])>iPort=atoi(&argv[i][3]);case'l'://DisableloopbackbLoopBack=TRUE;case'n'://Numberofmessagestosend/recvdwCount=atoi(&argv[i][3]);}}}}//Winsockintmain(intargc,char{ structsockaddr_in sock, len=sizeof(structsockaddr_in), Winsockif(WSAStartup(MAKEWORD(2,2),&wsd)!={return-1;}//Winsock2if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,||WSA_FLAG_OVERLAPPED))=={printf("socketfailedwith:%d\n",WSAGetLastError());return-}local.sin_family=local.sin_port=if(bind(sock,(structsockaddr*)&local,sizeof(local))==SOCKET_ERROR){printf("bindfailedwith:%d\n",WSAGetLastError());return-1;}//SetuptheSOCKADDR_INstructuredescribingthe//groupwewantto =AF_INET; =//ChangetheTTLtosomethingmoreoptval=(char*)&optval,sizeof(int))==SOCKET_ERROR){return-1;}//Disableloopbackifif{optval=(char*)&optval,sizeof(optval))==SOCKET_ERROR){return-1;}}//Jointhemulticastgroup.NotethatsockMisnot//tosendorreceivedata.Itisusedwhenyouwant//leavethemulticastgroup.Yousimplycall//onif((sockM=WSAJoinLeaf(sock,(SOCKADDR*)&remote,sizeof(remote),NULL,NULL,NULL,NULL,JL_BOTH))=={pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论