请教关于multicast and broadcast的区别和关系??

sharetop 2001-06-27 11:34:19

我是低手,请教一个问题:

关于multicast我知道是多点,但它与广播的boardcast有什么差别?
最好帮分析一下从使用上和应用上?

multicast的地址是224.X.X.X可以吧?这样只能在本网关以内的host能接受到还是整个internet?广播呢?有什么地址?

我想做一个实时语音交流的软件,在某个人这里,发一个语音流到multicast地址,在本局网内可以收到,但是不知道局网外能否收到?

另外所谓支持multicast的路由是什么概念?能说明一下吗?

如果multicast只能在局网内使用,那要广域上用的,我如何做才好?

请大家讨论一下吧,我会视参与人的多少持继加分的………

...全文
879 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
game_boy 2001-07-03
  • 打赏
  • 举报
回复
to KEIGO(KEIGO):廣播通過路由器沒有甚麼需要我們做的,因為路由器支持轉發廣播,我們發出去的IP包的目的地址如果是指向某個網絡的廣播地址,路由器就把此數據報發送往目的網絡,和普通單播轉發是同樣的機制,單播通過路由器時也只是把其目的IP地址的網絡部分提取出來在路由器的
路由表里進行遍歷.

to xlqin():對的,多播要通過路由器必須有IGMP路由器的支持,我在"http://www.csdn.net/expert/topic/162/162417.shtm"比較詳細的說了有關IGMP,pacman說的沒有錯,多播路由器之間的通信還要靠許多協議支持,不過我們不用去管路由器怎麼實現,只要本機軟件支持和有IGMP路由器支持就可以進行我們的編程了,建議你看看"TCP/IP祥解"卷一關於多播的章節,
zdybj 2001-07-03
  • 打赏
  • 举报
回复
study , thanks . I 服了 you!!
xlqin 2001-07-03
  • 打赏
  • 举报
回复
不加任何设置就行吗,才怪?
caiyi9000 2001-07-03
  • 打赏
  • 举报
回复
谁说拨号就不能组播了?
xlqin 2001-07-03
  • 打赏
  • 举报
回复
我在www.programsalon.com上看到一个多播的例子,MulticastSocket_Demo这个例子很好
的说明了多播如何编程,在 join 对话框中填上一合法D类地址和一段口号,一个简单
的聊天室就可以工作了,但这只是在局网中,如果通过拨号上网,就不行!请高手指点
在此基础上,还要什么硬软件设置才行?
sharetop 2001-07-03
  • 打赏
  • 举报
回复

TCP/IP详解一书网上有下的吗??

急,我太想学习了。!!!

xlqin 2001-07-03
  • 打赏
  • 举报
回复
to game_boy(gamesboy) "TCP/IP祥解"卷一關於多播我看过了,但具体的设置我还是不明白!
caiyi9000 2001-07-02
  • 打赏
  • 举报
回复
给你一个接口函数,它创建一个单向发送或单向接收或双向发送和接收的组播socket

McFlag:组播类型JL_BOTH:双向,JL_RECEIVER_ONLY:只接收, JL_SENDER_ONLY:只发送
聊天室中一般设为JL_BOTH,视频传输软件的服务器一般设为JL_SENDER_ONLY,客户端一般设为JL_RECEIVER_ONLY
BOOL McSocket::Create (int McFlag)
{
//make sure the protocol and capacity exit
WORD wVersionRequested; //request version of winsock
WSADATA wsaData; //returned sock data
int rightsock=0;
int ret;

WSAPROTOCOL_INFO* Proto_Info=NULL;
DWORD length=0;
BOOL Multicast_Supported=FALSE;
INT iProto[2];

wVersionRequested = MAKEWORD( 2,2);
ret = WSAStartup( wVersionRequested, &wsaData ); //initial winsock
if ( ret != 0 )
{
m_Errmsg="Winsock 启动失败";
return FALSE;
}
else if ( LOBYTE( wsaData.wVersion ) != 2 ¦¦HIBYTE( wsaData.wVersion ) != 2 ) //check version
{
m_Errmsg="Winsock 版本不对,请使用WINSOCK2.2";
WSACleanup( );
return FALSE;
}
else //check protocol and capacity
{

iProto[0]=IPPROTO_UDP;
iProto[1]=NULL;

ret=WSAEnumProtocols(iProto, (LPWSAPROTOCOL_INFO)Proto_Info,&length);
if(ret==SOCKET_ERROR && WSAGetLastError() ==WSAENOBUFS)
{
Proto_Info=new WSAPROTOCOL_INFO[length/sizeof(WSAPROTOCOL_INFO)];
if(Proto_Info==NULL)
{
m_Errmsg="申请内存时出错";
WSACleanup();
return FALSE;
}
ret=WSAEnumProtocols(iProto, (LPWSAPROTOCOL_INFO)Proto_Info,&length);
if(ret==SOCKET_ERROR)
{
ret=WSAGetLastError();
m_Errmsg.Format("无法读取协议信息,错误代码:%d",ret);
delete[] Proto_Info;
WSACleanup();
return FALSE;
}
}
//mod 1/9 else
//mod 1/9 {
for(int j=0;j<ret;j++)
{
if(Proto_Info[j].dwServiceFlags1 & XP1_SUPPORT_MULTIPOINT !=0
&& Proto_Info[j].iAddressFamily==AF_INET )
{
Multicast_Supported=TRUE;
rightsock=j;
break; ///mod 1/9 IMPORTANT!!!!
}
}
if(!Multicast_Supported)
{
m_Errmsg="系统不支持组播或无相应协议";
WSACleanup();
return FALSE;
}
//mod 1/9 }

}

//create a multipoint socket
m_Socket=WSASocket(FROM_PROTOCOL_INFO ,
FROM_PROTOCOL_INFO ,
FROM_PROTOCOL_INFO ,
(LPWSAPROTOCOL_INFO)&(Proto_Info[rightsock]),
0,
WSA_FLAG_MULTIPOINT_C_LEAF¦WSA_FLAG_MULTIPOINT_D_LEAF);

if(m_Socket==INVALID_SOCKET)
{
ret=WSAGetLastError();
m_Errmsg.Format("创建SOCKET时发生异常,错误代码:%d",ret);
delete[] Proto_Info;
WSACleanup( );
return FALSE;
}
delete[] Proto_Info;

//set the socket notification message
if(WSAAsyncSelect(m_Socket,m_hWnd ,IP_EVENT,FD_CONNECT ¦ FD_CLOSE ¦ FD_WRITE ¦ FD_READ)==SOCKET_ERROR )
{
ret=WSAGetLastError();
m_Errmsg.Format( "在设定操作通知时出错,错误代码:%d",ret);

closesocket(m_Socket);
WSACleanup( );
return FALSE;
}

//加入一个多播组
if(WSAJoinLeaf(m_Socket, (struct sockaddr FAR * )&m_MultiGroup, sizeof(sockaddr), NULL, NULL, NULL, NULL, McFlag) == INVALID_SOCKET)
{
ret=WSAGetLastError();
m_Errmsg.Format(" 加入多点组时出错,错误代码:%d",ret);

closesocket(m_Socket);
WSACleanup( );
return FALSE;
}
return TRUE;
}
sharetop 2001-07-02
  • 打赏
  • 举报
回复

对呀,如何进行组播呢??还请指教!!
cofei 2001-07-02
  • 打赏
  • 举报
回复
怎么进行组播呢?
pacman 2001-07-02
  • 打赏
  • 举报
回复
IGMP只是实现多播路由的一个步骤,还需要借助各种多播路由协议如dvmrp,pim-sm.pim-dm,
mospf,mbgp........
sharetop 2001-07-02
  • 打赏
  • 举报
回复

这问题越来越多人参与,多谢!!!

我根据我的IP和掩码算出的广播地址是不是可以广播到网外?如果路由支持呢?或者我想让外网也收到我的视频流,我应该如何做?是发到某个多播地址?哪个地址?还是用广播地址?又是哪个地址?

因为我是用java来做,也不想太接触底层的东西,主要想了解概念。

而我在局网内用224.0.0.1这个多播地址可以在整个局网内的机器都听到吗?如果可以与我算出的广播地址有何区别,是否效果是一样的?

另我也想知道拨号上网方式如何实现?如果可以实现的话。

xlqin 2001-07-02
  • 打赏
  • 举报
回复
谁能用实例说明将两台拔号上网通过组播通信的软、硬件环境!
网上视频直拔是用组播实现的吗?
xlqin 2001-07-02
  • 打赏
  • 举报
回复
上面的各位大虾,我也对此问题非常的关心,我注意到game_boy所说的:
以上是相對於局域網內部的組播情況,如果要參加的多播組包含多個屬於不同網絡的主機則需要進行IGMP通信,需要IGMP路由器和相應 IGMP軟件的支持.IGMP負責internet上組播服務的路由選擇,
能祥谈一下IGMP想关软件和设置吗,我写了一个组播程序,在LAN中工作的很好,用两台
拔号上网的机器就不行,是IGMP没有安装的原因吧?
KEIGO 2001-07-02
  • 打赏
  • 举报
回复
to game_boy:
广播通过路由器怎么实现的?
cofei 2001-06-29
  • 打赏
  • 举报
回复
to sharetop:
你的广播地址应该是224.0.0.255
sharetop 2001-06-29
  • 打赏
  • 举报
回复

to caiyi9000(飞翔的大鹏) and game_boy(gamesboy) :


广播地址是不是255.255.255.255?我不能发信息到这个地址,是不是与我在局网内有关?
但是我可以发信息到 224.0.0.1上,也能本机收到。

还请指教。

game_boy 2001-06-29
  • 打赏
  • 举报
回复
to sharetop:可以去看"TCP/IP祥解"或者"用TCP/IP進行網際互連",這是關於TCP/IP方面最有影響力的兩本書
caiyi9000 2001-06-29
  • 打赏
  • 举报
回复
广播地址是指你的机器的IP地址除了子网掩码那些位数,把剩下的位全改为1后的IP地址。比如你局域网的IP地址为:192.168.145.XXX,子网掩码为255.255.255.0,那么你的广播地址为192.168.145.255:
caiyi9000 2001-06-29
  • 打赏
  • 举报
回复
《Windows网络编程技术指南》
加载更多回复(9)

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧