多播收发程序multicast

来源:互联网 发布:淘宝促销faq 编辑:程序博客网 时间:2024/05/17 14:17

最近工作中编写UDP多播程序,要求能收能发。要求是非常简单了,但是从来没有这方面的经验,于是开始到网上翻,先看看基本的概念,再下载能用的代码,然后改成自己需要的,凡事都是三段论,三步走。

 

概念:

多播:加入了同一个多播组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要数据(未加入组)主机的其他通讯。

 

代码:

接下来找代码,看看多播是什么效果,有个切身的感受,才能加深理解嘛。上google code search 输入 “multicast ip_add_membership lang:c|c++ 234.5.6.7” ,搜索的关键字里面加了一个ip地址,是因为看了别的例子,拿这个ip地址做多播地址,所以就把它也当关键字输进去了,测试了几个,发现这个好用,简单http://www.google.cn/codesearch/p?hl=zh-CN#uKFNR_GmXJU/reference/programming/features/multicast/MulticastTest.zip%7CYvUlBXkxhqc/Main.cpp&q=multicast%20ip_add_membership%20lang:c%7Cc++%20234.5.6.7

 

下面是连接提供的代码,新建一个控制台工程,粘贴过来就可以用,可能需要在最前面加一行#include "stdafx.h"

 

  

编译运行,可以收发数据。看上来这个东西可以用啊。关键的东西就是加入多播组。

 

修改:

在发送函数bSendMulticast和接收函数bReceiveMulticast上修改,能够收发我自己的数据了。好啦,有了可以用的代码,我就有了基础设施了,可以搭建自己的东西。

 

开展自己的工作:

上面的代码的读写是在一个循环里面完成,因为我的任务的要求,要有读线程,当有数据时调用一个回调函数,写就不需要另开线程了,主线程里面检查有数据则发送,无数据则空转。

 

 

有人问:socket可以同时读写吗,也就是说我在两个线程里面用同一个socket句柄,需要互斥吗?

答:(非标准答案,请观众再自己确认一下)

如果一个是读线程,一个是写线程,那就不用互斥了。

如果每个线程里面既有读,又有写,那就好好保护一下吧。(好像没有这么干的,自找麻烦嘛,这不是!)

 

 

 

 

 

原创粉丝点击