社区
网络编程
帖子详情
哪位高手做过网络层组播流媒体系统?有没有这样的开源代码参考一下,多谢了!
harezgq
2007-01-17 10:27:09
现在要做一个网络层组播流媒体系统,哪位高手给点思路?
...全文
560
11
打赏
收藏
哪位高手做过网络层组播流媒体系统?有没有这样的开源代码参考一下,多谢了!
现在要做一个网络层组播流媒体系统,哪位高手给点思路?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
crystal_heart
2007-01-25
打赏
举报
回复
up
lirengming
2007-01-25
打赏
举报
回复
www.openh323.org
http://www.voxgratia.org/downloads.html
harezgq
2007-01-23
打赏
举报
回复
up.
harezgq
2007-01-22
打赏
举报
回复
写了一个服务端和一个客户端程序;
客户端接不到组播数据;不知道什么原因
//server端
#include "winsock2.h"
#include <ws2tcpip.h>
#include "tpipv6.h" // For IPv6 Tech Preview.
#define MulticastAddress "224.0.0.8"
#define MulticastPort 25000
char sendbuf[6]="hello";
int numsend;
int iTTL=7;
SOCKET Sock,SockM; //多播套接字
DWORD cbRet;
bool bFlag,bJoin;
SOCKADDR_IN local,Remote,From; //分别指向本地、多播组和数据来源的IP地址与端口
int Fromlen;
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int iret;
wVersionRequested = MAKEWORD(2,2);
iret = WSAStartup(wVersionRequested, &wsaData); //初始化WinSock2资源
if(iret!= 0){
printf("不能加载Windows套接字动态链接库,MB_OK");
return;
}
if (LOBYTE(wsaData.wVersion) !=2 || HIBYTE(wsaData.wVersion) !=2){
printf("WinSock DLL不支持2.0版本,MB_OK");
WSACleanup( );
return;
}
//创建一个套接字
Sock=WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,
(LPWSAPROTOCOL_INFO)NULL,0,WSA_FLAG_OVERLAPPED
| WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);
//将套接字绑定到用户指定端口及默认的接口
memset(&local,0,sizeof(local));
local.sin_family=AF_INET;
local.sin_port=htons(MulticastPort);
local.sin_addr.s_addr=htonl(INADDR_ANY);
bind(Sock,(struct sockaddr FAR *)&local,sizeof(local));
//设置多播数据报传播范围(生存时间TTL)
WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&iTTL,sizeof(int),
NULL,0,&cbRet,NULL,NULL);
memset(&Remote,0,sizeof(Remote));
Remote.sin_family=AF_INET;
Remote.sin_addr.s_addr=inet_addr(MulticastAddress);
Remote.sin_port=htons(MulticastPort);
//加入到指定的多播组,并指定作为发送者(JL_SENDER_ONLY)
/*
SockM=WSAJoinLeaf(Sock,(sockaddr*)&Remote,sizeof(Remote),
NULL,NULL,NULL,NULL,JL_SENDER_ONLY);
*/
while(1)
{
if (sendto(Sock,sendbuf,sizeof(sendbuf),0,(sockaddr*)&Remote,sizeof(Remote))==SOCKET_ERROR)
{
printf("sendto failed with: %d\n",WSAGetLastError());
closesocket(SockM);
closesocket(Sock);
WSACleanup();
return;
}
Sleep(20);
}
}
//客户端
#include "winsock2.h"
#include <ws2tcpip.h>
#include "tpipv6.h" // For IPv6 Tech Preview.
#define MulticastAddress "224.0.0.8"
#define MulticastPort 25000
char recvbuf[6];
int numsend;
int iTTL=7;
SOCKET Sock,SockM; //多播套接字
DWORD cbRet;
bool bFlag,bJoin;
SOCKADDR_IN local,Remote,From; //分别指向本地、多播组和数据来源的IP地址与端口
int Fromlen,ret;
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int iret;
wVersionRequested = MAKEWORD(2,2);
iret = WSAStartup(wVersionRequested, &wsaData); //初始化WinSock2资源
if(iret!= 0){
printf("不能加载Windows套接字动态链接库,MB_OK");
return;
}
if (LOBYTE(wsaData.wVersion) !=2 || HIBYTE(wsaData.wVersion) !=2){
printf("WinSock DLL不支持2.0版本,MB_OK");
WSACleanup( );
return;
}
//创建一个套接字
Sock=WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,
(LPWSAPROTOCOL_INFO)NULL,0,WSA_FLAG_OVERLAPPED
| WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);
//将套接字绑定到用户指定端口及默认的接口
memset(&local,0,sizeof(local));
local.sin_family=AF_INET;
local.sin_port=htons(MulticastPort);
local.sin_addr.s_addr=htonl(INADDR_ANY);
bind(Sock,(struct sockaddr FAR *)&local,sizeof(local));
//设置多播数据报传播范围(生存时间TTL)
WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&iTTL,sizeof(int),
NULL,0,&cbRet,NULL,NULL);
memset(&Remote,0,sizeof(Remote));
Remote.sin_family=AF_INET;
Remote.sin_addr.s_addr=inet_addr(MulticastAddress);
Remote.sin_port=htons(MulticastPort);
//加入到指定的多播组,并指定为接收者(JL_RECEIVER_ONLY)
if((SockM=WSAJoinLeaf(Sock,(sockaddr*)&Remote,sizeof(Remote),
NULL,NULL,NULL,NULL,JL_RECEIVER_ONLY))==INVALID_SOCKET)
{
printf("WSAJoinLeaf() failed:%d\n",WSAGetLastError());
closesocket(Sock);
WSACleanup();
return;
}
while(1)
{
if ((ret = recvfrom(SockM,recvbuf,sizeof(recvbuf),0,(sockaddr *)&From,&Fromlen))==SOCKET_ERROR)
{
printf("recvfrom failed with:%d\n",WSAGetLastError());
closesocket(SockM);
closesocket(Sock);
WSACleanup();
return;
}
//AfxMessageBox(recvbuf);
if (strcmp(recvbuf,"hello")==0)
{
printf("client has received data");
break;
}
}
}
Estfania
2007-01-18
打赏
举报
回复
开源代码不是很清楚;
不过软件到有
harezgq
2007-01-18
打赏
举报
回复
再顶!
ajn_sailing
2007-01-18
打赏
举报
回复
up
stevphen
2007-01-18
打赏
举报
回复
关注
lr21shiji
2007-01-18
打赏
举报
回复
ding
wormwormwormworm
2007-01-18
打赏
举报
回复
这个不好找啊
gaooo
2007-01-18
打赏
举报
回复
gz
UDP
组播
终于搞明白了UDP
组播
,5分钟讲解清楚。
小智音箱IGMP支持
组播
流媒体
传输
小智音箱通过IGMP
组播
技术实现多设备同步播放,降低网络负载,提升音频分发效率与
系统
可扩展性。
组网基础之深入解析二层
组播
所谓二层
组播
,即数据帧的转发是面向二层的,根据
组播
MAC地址来决定数据帧的转发方向,而三层
组播
,即所谓的IP
组播
,则根据三层
组播
地址,即
组播
IP地址来进行数据帧的转发。 二层
组播
相关协议包括IGMP 和GMRP协议。让我们从分析
组播
MAC地址
开
始,逐步而深入的了解二层
组播
。
组播
MAC地址 所谓
组播
MAC地址,是一类逻辑的MAC地址,该MAC地址代表一个
组播
组,所有属于该组的成员都接收
PixStream WinSend:网络
流媒体
组播
测试与推送工具详解
本文还有配套的精品资源,点击获取 简介:PixStream WinSend是一个面向IT专业人士的
组播
测试工具,可将文件转换为
流媒体
数据并推送到指定
组播
地址。该工具广泛应用于网络广播、多点传输和视频流测试等领域。本文将介绍其主要特点、工作原理及应用场景。PixStream WinSend支持多种
流媒体
格式,能与VLC播放器结合进行内容接收和播放。此外,它便于测试网络的
组播
能力,调试网络问题,且具备用户友好的界面。随着网络技术的发展,该工具在
流媒体
服务的各个环节中发挥着重要作用。
IP
组播
简介
作为IP传输三种方式之一,IP
组播
通信指的是IP报文从一个源发出,被转发到一组特定的接收者。相较于传统的单播和广播,IP
组播
可以有效地节约网络带宽、降低网络负载,避免广播堵塞带来的诸如摄像头花屏,视频马赛克等问题,所以被广泛应用于IPTV、实时数据传送和多媒体会议等网络业务中。
网络编程
18,356
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章