基于IP Multicast的分布式音视频接几和共享的监控系统的传输和实现
2.2 Windows下,IP组播的Winsock2实现
Window
s环境下组播通信是基于WindowsSocket的。Windows Socket提供两种不同IP组播的实现方法:Windows Socket提供两种不同的IP组播的实现方法:Winsock1与Winsock2。在Windows2000平台实现VC++6.0开发工具,在本系统中实现了基于Winsock2的组播通信编程。
发送端(前端、客户端)实现步骤:
(1)加载Winsock2库,完成Winsock2的初始化:
WSAStarup(MAKEWORD(2,2),&wsaData);(2)建立本地套接字(UDP):
m_socket=WSASocke(AF_INET,SOCK_DGRAM,IPPROTO_UDP,NULL,0,WSA_FLAG_MULTIPOINT_C_LEAF|
WSA_FLAG_MULTIPOINT_D_LEAF);
//组播通信具有两个层面的重要特征:控制层面和数据层面。控制层面决定一个多播组建立通信的方式,数据层面决定通信成员间数据传输的方式。每一个层面有两种形式,一种是“有限的”,另一种是“无根的”;数据报IP组播在两个层面上都是“无根”的。任一用户发送的数据都将被传送到组中所有其它成员。最后一个参数表明新创建的套接字在控制层面与数据层面都是“无根的”。
图2
可以通过setsocket函数设置套接字的属性,如地址重用,缓冲区是接收还是发送。
M_localAddr.sin_family = AF_INET;
M_localAddr.sin_port=m_iPort;//本地端口号
M_localAddr..sin _addr.S_un.S_addr=m_uLocalIP;//本地IP地址;
(3)绑定(将新创建的套字节与本地插口地址进行绑定):
bind(m_socket,(PSOCKADDR)&(m_localAddr),sizeof(m_localAddr);
(4)设置生存时间(即数据包最多允许路由多少个网段):
WSAIoctl(m_socket,SIO_MULTICAST_SCOPE,//设置数据报生存时间;
&iMcastTTL,//生存时间大小;
sizeof(iMcastTTL),NULL,0,&cbRet,NULL,NULL);
(5)配置Loopback,以决定组播数据帧是否回送:
int bLoopback=FALSE;
WSAIoct(m_socket,SIO_MULTIPOINT_LOOPBACK,//允许或禁止组播数据帧回送;
&bLoopback,sizeof(bLoopback),NULL,0,&cbRet,NULL,NULL);
(6)收发数据:
在发送方(前端、客户端)响应发送的消息函数中调用下面函数:
WSASendTo (m_socket,&stWSABuf,&cbRet,0,(struct sockaddr*)&stDestAdd
《基于IP Multicast的分布式音视频接几和共享的监控系统的传输和实现(第2页)》