精华内容
下载资源
问答
  • 新开通C++ 交流群,有意者加入。相关c++ 的一切学习交流,也希望一些牛人加入指导指导!群号:127664644

    新开通C++ 交流群,有意者加入。

    相关c++ 的一切学习交流,也希望一些牛人加入指导指导!

    群号:127664644

    展开全文
  • 长大c++交流群

    2009-10-11 00:17:00
    此文包含如下内容,请自行查看 1、长大C++讨论群规 2、倡导的行为 3、关于共享空间的使用说明(new) 4、附赠提问的艺术 长大C++讨论群规: 1.每天的 8:00-23:00点为技术讨论时间 2.不允许灌水。 3.其它时间为非...

    Enjoy C++, Enjoy Everyday!

    此文包含如下内容,请自行查看


    1、长大C++讨论群群规
    2、倡导的行为
    3、关于群共享空间的使用说明(new)
    4、附赠提问的艺术


    长大C++讨论群群规:


    1.每天的 8:00-23:00点为技术讨论时间
    2.不允许灌水。
    3.其它时间为非技术时间
    4.不允许发布和讨论政治,色情,宗教等敏感问题。
    5.禁止骂人,侮辱言语,色情内容以及其它违法内容
    6.为了更好的交流, 长大的昵称改成年级+班级+名字 、外校的改成所在城市+名字  谢谢!!
    7.严禁刷屏,对于大篇幅的问题(大约40行),请到CSDN论坛发言,然后贴url到群里
    8.对于不活跃,不发言的人员,将根据发言时间踢出。新人请尽快发言,以免被误伤
    9.此规定管理员执行。

    10.倡导的行为:
    11.初学者:人人为我,我为人人
    12.高手:我为人人,人人为我
    13.人多了,什么事情都会发生,希望大家不要太认真,大家过得高兴才是真的。


    关于群共享空间的使用说明

    群共享是为了方便大家交流一些珍贵资源。希望大家可以把自己认为精华的东西分享上去。为了更好的使大家交流,对于分享的资源,做如下说明


    1.群共享,只限于分享技术性资料。对于无关资料,管理员有权在不通知上传人的情况下,直接删除。对于不确定的资料,可以和管理员联系。请他帮你鉴别。
    2.上传前,请查看群共享里是否有类似资源。如果有的话,不建议再上传重复性资源。如果你认为你的资源确实是精华,请联系群管理员。请他帮你核实后,再定夺如何处理。
    3.上传前,请先用本地杀毒软件,对你的资源进行查杀。以免使下载的朋友受意外感染。
    鉴于群共享的空间有限,对于大于30M的资源,不建议上传到群共享里。一来,上传的慢。二来,下载者因网络不同,下载速度不同,有可4.能下的极慢。对于大于30M的资源,如果网上有类似资源。可以在群共享里,分享下载链接,供大家下载。如果网上确实没有类似资源,请通知管理员后,再上传。以免被误删。
    5.管理员有责任,定期检查群共享中的资源。对于非技术行资料,有病毒的资料。可以直接删除。对于重复的资料,应该通知本人后删除。确实联系不到的,可直接删除。

     

     

    附赠提问的艺术:
    1 优先发帖到CSDN的论坛上,那里人多力量大
    2 把你的帖子链接发到QQ群里,让大家去帮你
    3 如果你非得让某位帮你,那就把链接转发一份给他的QQ,不过最好不要打扰人家。这是很不礼貌的。

     

     

    展开全文
  • 1、启动Visual C++6.0,创建一个控制台项目工程MultiCase。在此项目工程中添加Sender和Receiver两个项目。 Receiver项目实现步骤: (1)创建一个SOCK_DGRAM类型的Socket。 (2)将此Socket绑定到本地的一个...

    在局域网中,管理员常常需要将某条信息发送给一组用户。如果使用一对一的发送方法,虽然是可行的,但是过于麻烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题,出现了一种多播技术(也常称为组播通信),它是基于IP层的通信技术。为了帮助读者理解,下面将简要的介绍一下多播的概念。
    众所周知,普通IP通信是在一个发送者和一个接收者之间进行的,我们常把它称为点对点的通信,但对于有些应用,这种点对点的通信模式不能有效地满足实际应用的需求。例如:一个数字电话会议系统由多个会场组成,当在其中一个会场的参会人发言时,要求其它会场都能即时的得到此发言的内容,这是一个典型的一对多的通信应用,通常把这种一对多的通信称为多播通信。采用多播通信技术,不仅可以实现一个发送者和多个接收者之间进行通信的功能,而且可以有效减轻网络通信的负担,避免资源的无谓浪费。
    广播也是一种实现一对多数据通信的模式,但广播与多播在实现方式上有所不同。广播是将数据从一个工作站发出,局域网内的其他所有工作站都能收到它。这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。使用广播消息的不利之处是每台机器都必须对该消息进行处理。多播通信则不同,数据从一个工作站发出后,如果在其它LAN上的机器上面运行的进程表示对这些数据“有兴趣”,多播数据才会制给它们。
    本实例由Sender和Receiver两个程序组成,Sender用户从控制台上输入多播发送数据,Receiver端都要求加入同一个多播组,完成接收Sender发送的多播数据。
    一、实现方法
    1、协议支持
    并不是所有的协议都支持多播通信,对Win32平台而言,仅两种可从WinSock内访问的协议(IP/ATM)才提供了对多播通信的支持。因通常通信应用都建立在TCP/IP协议之上的,所以本文只针对IP协议来探讨多播通信技术。
    支持多播通信的平台包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4、Windows 2000和WindowsXP。自2.1版开始,Windows CE才开始实现对IP多播的支持。本文实例建立在WindowsXP专业版平台上。
    2、多播地址
    IP采用D类地址来支持多播。每个D类地址代表一组主机。共有28位可用来标识小组。所以可以同时有多达25亿个小组。当一个进程向一个D类地址发送分组时,会尽最大的努力将它送给小组的所有成员,但不能保证全部送到。有些成员可能收不到这个分组。举个例子来说,假定五个节点都想通过I P多播,实现彼此间的通信,它们便可加入同一个组地址。全部加入之后,由一个节点发出的任何数据均会一模一样地复制一份,发给组内的每个成员,甚至包括始发数据的那个节点。D类I P地址范围在244.0.0.0到239.255.255.255之间。它分为两类:永久地址和临时地址。永久地址是为特殊用途而保留的。比如,244.0.0.0根本没有使用(也不能使用),244.0.0.1代表子网内的所有系统(主机),而244.0.0.2代表子网内的所有路由器。在RFC 1700文件中,提供了所有保留地址的一个详细清单。该文件是为特殊用途保留的所有资源的一个列表,大家可以找来作为参考。“Internet分配数字专家组”(I A N A)负责着这个列表的维护。在表1中,我们总结了目前标定为“保留”的一些地址。临时组地址在使用前必须先创建,一个进程可以要求其主机加入特定的组,它也能要求其主机脱离该组。当主机上的最后一个进程脱离某个组后,该组地址就不再在这台主机中出现。每个主机都要记录它的进程当前属于哪个组。表1部分永久地址说明:
    地 址 说 明
    244.0.0.1 基本地址(保留)
    244.0.0.1 子网上的所有系统
    244.0.0.2 子网上的所有路由器
    244.0.0.5 子网上所有OSPF路由器
    244.0.0.6 子网上所有指定的OSPF路由器
    244.0.0.9 RIP第2版本组地址
    244.0.1.1 网络时间协议
    244.0.1.24 WINS服务器组地址
    3、多播路由器
    多播由特殊的多播路由器来实现,多播路由器同时也可以是普通路由器。各个多播路由器每分钟发送一个硬件多播信息给子网上的主机(目的地址为244.0.0.1),要求它们报告其进程当前所属的是哪一组,各主机将它感兴趣的D类地址返回。这些询问和响应分组使用IGMP(Internet group management protocol),它大致类似于ICMP。它只有两种分组:询问和响应,都有一个简单的固定格式,其中有效载荷字段的第一个字段是一些控制信息,第二字段是一个D类地址,在RFC1112中有详细说明。
    多播路由器的选择是通过生成树实现的,每个多播路由器采用修改过的距离矢量协议和其邻居交换信息,以便向每个路由器为每一组构造一个覆盖所有组员的生成树。在修剪生成树及删除无关路由器和网络时,用到了很多优化方法。 
    4、库支持
    WinSock提供了实现多播通信的API函数调用。针对IP多播,WinSock提供了两种不同的实现方法,具体取决于使用的是哪个版本的WinSock。第一种方法是WinSock1提供的,要求通过套接字选项来加入一个组;另一种方法是WinSock2提供的,它是引入一个新函数,专门负责多播组的加入,这个函数便是WSAJoinLeaf,它是基层协议是无关的。本文将通过一个多播通信的实例的实现过程,来讲叙多播实现的主要步骤。因为Window98以后版本都安装了Winsock2.0以上版本,所以本文实例在WinSock2.0平台上开发的,但在其中对WinSock1实现不同的地方加以说明。
    二、编程步骤
    1、启动Visual C++6.0,创建一个控制台项目工程MultiCase。在此项目工程中添加Sender和Receiver两个项目。
    Receiver项目实现步骤:
    (1)创建一个SOCK_DGRAM类型的Socket。
    (2)将此Socket绑定到本地的一个端口上,为了接收服务器端发送的多播数据。
    (3)加入多播组。
    ①WinSock2中引入一个WSAJoinLeaf,此函数原型如下:
    SOCKET WSAJoinLeaf( SOCKET s, const struct sockaddr FAR *name, int namelen, 
    LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, DWORD dwFlags );
    其中,第一个参数s代表一个套接字句柄,是自WSASocket返回的。传递进来的这个套接字必须使用恰当的多播标志进行创建;否则的话WSAJoinLeaf就会失败,并返回错误WSAEINVAL。第二个参数是SOCKADDR(套接字地址)结构,具体内容由当前采用的协议决定,对于IP协议来说,这个地址指定的是主机打算加入的那个多播组。第三个参数namelen(名字长度)是用于指定name参数的长度,以字节为单位。第四个参数lpCallerData(呼叫者数据)的作用是在会话建立之后,将一个数据缓冲区传输给自己通信的对方。第五个参数lpCalleeData(被叫者数据)用于初始化一个缓冲区,在会话建好之后,接收来自对方的数据。注意在当前的Windows平台上,lpCallerData和lpCalleeData这两个参数并未真正实现,所以均应设为NULL。LpSQOS和lpGQOS这两个参数是有关Qos(服务质量)的设置,通常也设为NULL,有关Qos内容请参阅MSDN或有关书籍。最后一个参数dwFlags指出该主机是发送数据、接收数据或收发兼并。该参数可选值分别是:JL_SENDER_ONLY、JL_RECEIVER_ONLY或者JL_BOTH。
    ②在WinSock1平台上加入多播组需要调用setsockopt函数,同时设置IP_ADD_MEMBERSHIP选项,指定想加入的那个组的地址结构。具体实现代码将在下面代码注释列出。
    (4)接收多播数据。
    Sender实现步骤:
    (1)创建一个SOCK_DGRAM类型的Socket。
    (2)加入多播组。
    (3)发送多播数据。
    3、编译两个项目,在局域网中按如下步骤测试:
    (1)将Sender.exe拷贝到发送多播数据的pc上。
    (2)将Receiver.exe拷贝到多个要求接收多播数据的pc上。
    (3)各自运行相应的程序。  
    (4)在Sender PC上输入多播数据后,你就可以在Receiver PC上看到输入的多播数据。
    三、程序代码
    Receiver.c程序代码:
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define MCASTADDR "233.0.0.1" //本例使用的多播组地址。
    #define MCASTPORT 5150 //绑定的本地端口号。
    #define BUFSIZE 1024 //接收数据缓冲大小。
    int main( int argc,char ** argv)
    {
     WSADATA wsd;
     struct sockaddr_in local,remote,from;
     SOCKET sock,sockM;
     TCHAR recvbuf[BUFSIZE];
     /*struct ip_mreq mcast; // Winsock1.0 */
     int len = sizeof( struct sockaddr_in);
     int ret;
     //初始化WinSock2.2
     if( WSAStartup( MAKEWORD(2,2),&wsd) != 0 )
     {
    printf("WSAStartup() failed\n");
    return -1;
     }
     /*
     创建一个SOCK_DGRAM类型的SOCKET
     其中,WSA_FLAG_MULTIPOINT_C_LEAF表示IP多播在控制面层上属于"无根"类型;
     WSA_FLAG_MULTIPOINT_D_LEAF表示IP多播在数据面层上属于"无根",有关控制面层和
     数据面层有关概念请参阅MSDN说明。
     */
     if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,
    WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|
    WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
     {
    printf("socket failed with:%d\n",WSAGetLastError());
    WSACleanup();
    return -1;
     }
     //将sock绑定到本机某端口上。
     local.sin_family = AF_INET;
     local.sin_port = htons(MCASTPORT);
     local.sin_addr.s_addr = INADDR_ANY;
     if( bind(sock,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR )
     {
    printf( "bind failed with:%d \n",WSAGetLastError());
    closesocket(sock);
    WSACleanup();
    return -1;
     }
     //加入多播组
     remote.sin_family = AF_INET;
     remote.sin_port = htons(MCASTPORT);
     remote.sin_addr.s_addr = inet_addr( MCASTADDR );
     /* Winsock1.0 */
     /*
     mcast.imr_multiaddr.s_addr = inet_addr(MCASTADDR);
     mcast.imr_interface.s_addr = INADDR_ANY;
     if( setsockopt(sockM,IPPROTO_IP,IP_ADD_MEMBERSHIP,
    (char*)&mcast,sizeof(mcast)) == SOCKET_ERROR)
     {
    printf("setsockopt(IP_ADD_MEMBERSHIP) failed:%d\n",WSAGetLastError());
    closesocket(sockM);
    WSACleanup();
    return -1;
     }
     */
     /* Winsock2.0*/
     if(( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote,sizeof(remote),
    NULL,NULL,NULL,NULL,
    JL_BOTH)) == INVALID_SOCKET)
     {
    printf("WSAJoinLeaf() failed:%d\n",WSAGetLastError());
    closesocket(sock);
    WSACleanup();
    return -1;
     }
     //接收多播数据,当接收到的数据为"QUIT"时退出。
     while(1)
     {
    if(( ret = recvfrom(sock,recvbuf,BUFSIZE,0,
    (struct sockaddr*)&from,&len)) == SOCKET_ERROR)
    {
     printf("recvfrom failed with:%d\n",WSAGetLastError());
     closesocket(sockM);
     closesocket(sock);
     WSACleanup();
     return -1;
    }
    if( strcmp(recvbuf,"QUIT") == 0 ) break;
    else {
     recvbuf[ret] = '\0';
     printf("RECV:' %s ' FROM <%s> \n",recvbuf,inet_ntoa(from.sin_addr));
    }
     }
     closesocket(sockM);
     closesocket(sock);
     WSACleanup();
     return 0;
    }
    Sender.c程序代码
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <stdio.h>
    #include <stdlib.h>
    #define MCASTADDR "233.0.0.1" //本例使用的多播组地址。
    #define MCASTPORT 5150 //本地端口号。
    #define BUFSIZE 1024 //发送数据缓冲大小。
    int main( int argc,char ** argv)
    {
     WSADATA wsd;
     struct sockaddr_in remote;
     SOCKET sock,sockM;
     TCHAR sendbuf[BUFSIZE];
     int len = sizeof( struct sockaddr_in);
     //初始化WinSock2.2
     if( WSAStartup( MAKEWORD(2,2),&wsd) != 0 )
     {
    printf("WSAStartup() failed\n");
    return -1;
     }
     if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,
    WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|
    WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
     {
    printf("socket failed with:%d\n",WSAGetLastError());
    WSACleanup();
    return -1;
     }
     //加入多播组
     remote.sin_family = AF_INET;
     remote.sin_port = htons(MCASTPORT);
     remote.sin_addr.s_addr = inet_addr( MCASTADDR );
     if(( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote,
    sizeof(remote),NULL,NULL,NULL,NULL,
    JL_BOTH)) == INVALID_SOCKET)
     {
    printf("WSAJoinLeaf() failed:%d\n",WSAGetLastError());
    closesocket(sock);
    WSACleanup();
    return -1;
     }
     //发送多播数据,当用户在控制台输入"QUIT"时退出。
     while(1)
     {
    printf("SEND : ");
    scanf("%s",sendbuf);
    if( sendto(sockM,(char*)sendbuf,strlen(sendbuf),0,
    (struct sockaddr*)&remote,sizeof(remote))==SOCKET_ERROR)
    {
     printf("sendto failed with: %d\n",WSAGetLastError());
     closesocket(sockM);
     closesocket(sock);
     WSACleanup();
     return -1;
    }
    if(strcmp(sendbuf,"QUIT")==0) break;
    Sleep(500);
     }
     closesocket(sockM);
     closesocket(sock);
     WSACleanup();
     return 0;
    }
    四、小结

    本实例对IP多播通信进行了探讨,实例程序由Sender和Receiver两部分组成,Sender用户从控制台上输入多播发送数据,Receiver端都要求加入同一个多播组,完成接收Sender发送的多播数据。 
    展开全文
  • C++学习交流群

    2020-06-04 14:42:59
    学习交流,资源共享 群号:810196747

    学习交流,资源共享

    群号:810196747

    展开全文
  • c++群

    2010-12-01 18:26:00
    c++交流群读经典书籍 探讨书中奥秘c++读书交流qq:124761525 c++资源共享交流群满足大家的资源需求在这里可以解决找资源难的问题! qq:125997284欢迎您的加入!
  • parasoft c++ test交流群

    2019-10-30 13:35:28
    非新手,有一定c++水平和经验的进. Parasoft C++test 是经广泛证明的最佳实践集成解决方案,它能有效提高开发团队工作效率和软件质量。 C++test支持编码策略增强,静态分析,全面代码走查,单元与组件的 测试,为...
  • rt...
  • 讨论基础适合初学者,内活跃。。。。。。。。。。。。。。。。。。。
  • Qt、C++学习交流群招管理员咯(群主为一枚Qt程序开发人员)
  • C++ MFC 学习交流群

    2012-06-01 10:42:44
    C++ MFC 学习交流群C++ MFC 学习交流群C++ MFC 学习交流群
  • 一个软件学习和交流,分享各自的学习经验。希望大家快加了哦。 126330898
  • C/C++/VC学习交流QQ:872144107

    千次阅读 2018-08-31 11:29:52
    C/C++/VC学习交流QQ:872144107
  • C/C++技术交流群:[color=#0000FF] 190 730 689 [/color]
  • C++爱好者交流群 群号:63643698 链接:http://url.cn/R1fmt6
  • 北京c++技术交流群 235760268,集技术交流,招聘求职于一体
  • 《趣学算法》书中为C++语言实现,图解多,通俗易懂,小学生,中学生,大学生,已参加工作人员均可轻松阅读。...《趣学算法》QQ交流群 : 514626235  在线评测系统: http://acm.nyist.edu.cn/JudgeOnline/step.php
  • C++哈哈堂 31843264编程`灌水`交流 24372952C++爱好者灌水天堂 3503799 以上是C++的下面这个是为软考准备向软件设计师进发 26118094
  • 推荐一个好的12471290提供在线招骋,C/C++,MFC技术交流! 推荐一个好的12471290提供在线招骋,C/C++,MFC技术交流
  • 其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C语言C++交流群583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。免费的公开课供你学习! 与Java和.NET比C+...
  • QQ:948954484 网站: www.codeguru.com www.codeproject.com www.vckbase.com www.csdn.net 软件: http://www.codeguru.cn/fav/soft.htm 教程: C函数实例参考手册 http://www.codeguru.cn/CPP/CExample/ C\C++实例...
  • .net有一个 50862683 .NET技术交流 可以进去交流交流技术心得|||QQ群号:65123254 希望大家能在这里找到学习的乐趣.QQ群号:65123254 |||15579482C语言帝国..|||C++没有 c/c++交流(分)不错 :54544413 这个是分 ...
  • 【文章福利】:小编推荐一个C语言/C++交流群:331684481!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加~启动程序后,让用户出拳,截图:用户出拳,...
  • 序言 C++是一门系统级语言,有些程序员小伙伴学了很久才...【文章福利】: 小编推荐一个C语言/C++交流群:967051845!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加~ 1. C++
  • c++初学小菜求交流

    2015-03-24 00:16:20
    学校学的内容讲的云里雾里的,不过最后庆幸自己学会啦,现在自学c++,看见这么多网友说c语言很难入门,让自己中途退缩,求大神和各位菜鸟伙伴们,有意者加QQ菜鸟交流群,群号:435863982,验证:1234,我们一起学习.
  • 学习交流群

    2013-10-05 18:23:13
    普通编程java,oc,C++ 群号:155646503 ios开发:229544310
  • 有喜欢或者想学习C/C++的朋友加一下我的C/C++交流群815393895。谢谢大家的支持 虚函数 以下是百度百科对于虚函数的解释: 定义:在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数[1] ...
  • **【文章福利】:**小编推荐一个C语言/C++交流群:331684481!整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加~ C++为什么难? 1、C++语法规则多 本身想通过各种规则克服

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,653
精华内容 661
关键字:

c++交流群

c++ 订阅