有关多播通讯的深入讨论--交换机对多播的支持?

romijn 2004-03-22 01:34:08
本人做了一视频服务器的程序,传送视频图像采用,udp在局域网内发送组播,客户端程序启动的时候加入多播组,同时开始组内数据的接收。通过windows2000的网络监视器来查看客户端Windows2k的网络接收情况,发现没有开启视频客户端的时候,网络利用率很小,网络接收到一些数据桢但不是太大;开启了视频客户端后,网络利用率马上提升到了10%左右,数据桢也增加了许多。通过以上的情况可以断定我的多播程序是没有问题的。
本人的程序的问题如下:当视频服务器程序打开的时候,不管客户端有没有开启,交换机(本人的交换机为一般的10M/100M自适应的交换机)上所有的端口的数据交换指示灯不停的在闪烁,这时网络发生了堵塞,各个机器都无法通过网关上网。只要一关服务器程序,交换机马上正常,各台机器就可以上网。
有人说是这种情况是交换机不支持多播,把数据复制到各个端口,所以和广播的效果一样,所以会产生网络风波?是这样的吗?希望高手指点。
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
romijn 2004-03-22
  • 打赏
  • 举报
回复
if(!m_Socket.IsConnected()){
m_Socket.Create("224.0.0.99",2002,this->m_hWnd);
if(!m_Socket.IsConnected()){
AfxMessageBox("Socket初试化失败!");
return;
}

//生成视频数据包装结构v
...
m_Socket.Send((char*)&v,sizeof(v))
romijn 2004-03-22
  • 打赏
  • 举报
回复
程序代码
CMultiCast::CMultiCast()
{
m_hWnd = NULL;
m_bConnected = FALSE;
}

CMultiCast::~CMultiCast()
{

}

BOOL CMultiCast::Create(CString lpstrAddr, unsigned short port, HWND hWnd)
{

if(m_bConnected){
TRACE("Has Successfully Create the socket!\n");
return FALSE;
}
m_hWnd = hWnd;

int ret;
int cbRet = 0;
int nIP_TTL =1;//设置IP数据生存期
BOOL bFlag;
WSADATA wsaData;

//WORD version = MAKEWORD(2, 0);
WORD version = MAKEWORD(2, 2);
//初试化socket
ret = WSAStartup(version, &wsaData);
if(ret != 0)
TRACE("Initilize Error!\n");
//生成socket
m_hSocket = WSASocket(AF_INET, SOCK_DGRAM,/* IPPROTO_UDP,NULL,0,0);*/
IPPROTO_UDP, (LPWSAPROTOCOL_INFO)NULL, 0,
WSA_FLAG_OVERLAPPED | WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF);

if (m_hSocket == INVALID_SOCKET){
TRACE("WSASocket:%d\n",WSAGetLastError());
return FALSE;
}

bFlag = TRUE; // 设置套接字为可重用端口地址
ret = setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&bFlag,
sizeof (bFlag));

if(ret == SOCKET_ERROR){
TRACE("setsockopt:%d",WSAGetLastError());
return FALSE;
}
// 将套接字绑扎到用户指定端口及默认的接口
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;//PF_INET;
addr.sin_port = htons (port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
ret = bind (m_hSocket, (struct sockaddr FAR *)&addr,
sizeof(struct sockaddr));

if (ret == SOCKET_ERROR){
TRACE("bind: %d", WSAGetLastError());
return FALSE;
}
// 设置多址广播数据报传播范围(TTL)
ret = WSAIoctl(m_hSocket, SIO_MULTICAST_SCOPE, &nIP_TTL,
sizeof (nIP_TTL), NULL, 0, (unsigned long*)&cbRet, NULL, NULL);
if (ret == SOCKET_ERROR){
TRACE("SAIoctl(SIO_MULTICAST_SCOPE):%d\n",WSAGetLastError());
return FALSE;
}

//设置多播返回(LOOKBACK)

BOOL nLoopBack=FALSE;//m_JoinDlg.m_Loopback;
ret = WSAIoctl(m_hSocket,SIO_MULTIPOINT_LOOPBACK,&nLoopBack,sizeof(nLoopBack),
NULL,0,(unsigned long*)&cbRet,NULL,NULL);
if (ret == SOCKET_ERROR){
TRACE("WSAIoctl:%d\n",WSAGetLastError());
return FALSE;
}

memset(&srcaddr,0,sizeof(srcaddr));
srcaddr.sin_family=AF_INET;
srcaddr.sin_addr.s_addr=inet_addr(lpstrAddr);
srcaddr.sin_port=htons(port);

//WSABUF wsaCalleeData;
m_hGroupSocket = WSAJoinLeaf(m_hSocket, (PSOCKADDR)&srcaddr,
sizeof(srcaddr), NULL, /*&wsaCalleeData*/NULL, NULL, NULL, JL_BOTH);

if (m_hGroupSocket == INVALID_SOCKET){
m_bConnected = FALSE;
TRACE("WSAJoinLeaf():%d\n", WSAGetLastError());
return FALSE;
}

ret = WSAAsyncSelect(m_hGroupSocket, m_hWnd, WM_MULTIPOINTEVENT,
FD_WRITE | FD_READ | FD_QOS | FD_GROUP_QOS | FD_CONNECT);

if(ret == SOCKET_ERROR){
TRACE("WSAAsyncSelect():%d\n", WSAGetLastError());
m_bConnected = FALSE;
return FALSE;
}
m_bConnected = TRUE;
return TRUE;
}

int CMultiCast::Send(char *lpData, int size)
{
if(m_hSocket == INVALID_SOCKET)
return -1;
unsigned long nDataSent = 0;
int nReturnCode;
WSABUF wsaBuf;
wsaBuf.len = size;
wsaBuf.buf = lpData;
nReturnCode = WSASendTo(/*m_hSocket*/m_hGroupSocket, &wsaBuf, 1, &nDataSent,
0, (LPSOCKADDR)&srcaddr, sizeof(SOCKADDR), NULL, NULL);
if(nReturnCode == SOCKET_ERROR){
TRACE0("Error in send packets to the network!\n");
return -1;
}

return nDataSent;
}

int CMultiCast::Receive(char *lpData, int size)
{
int nReturnCode ;
WSABUF wsaRecvBuf;
wsaRecvBuf.buf = lpData;
wsaRecvBuf.len = size;
unsigned long cbRet = 0;

int iLen = sizeof (srcaddr);
int dFlag = 0;

nReturnCode = WSARecvFrom(m_hGroupSocket, &wsaRecvBuf, 1,
&cbRet, (unsigned long*)&dFlag, (struct sockaddr *)&srcaddr,
&iLen, NULL, NULL);
if(nReturnCode == SOCKET_ERROR){
if(WSAEWOULDBLOCK == WSAGetLastError())
TRACE("Socket will block!\n");
else{
if(WSAGetLastError() == WSA_IO_PENDING)
TRACE("IO is pending!\n");
else
return -1;
}
TRACE("RecvFrom Error:%d\n", WSAGetLastError());
}
//本次操作没有接收到数据
if(cbRet == 0)
return 0;

//通知父窗口读数据
return cbRet;
}

void CMultiCast::Initilize()
{
/*
WSADATA wsaData;
WORD version = MAKEWORD(2, 0);
int ret = WSAStartup(version, &wsaData);
if(ret != 0)
TRACE("Initilize Error!\n");
*/
}

void CMultiCast::Unintilize()
{
//closesocket(m_hGroupSocket);
//closesocket(m_hSocket);
if (WSACleanup() != 0){
TRACE("UnInitilize Error:%d\n", WSAGetLastError());
}
}

BOOL CMultiCast::IsConnected()
{
return m_bConnected;
}

void CMultiCast::Close()
{
closesocket(m_hSocket);
closesocket(m_hGroupSocket);
m_bConnected = FALSE;
}
romijn 2004-03-22
  • 打赏
  • 举报
回复
多谢这么多热心人,我觉得程序没有错!下面贴出来给大家看看。我的程序发送的数据量非常的大。
头文件
#include "Winsock2.h"
#pragma comment(lib,"Ws2_32.lib")

#define WM_MULTIPOINTEVENT WM_USER + 1001

class CMultiCast : public CObject
{
public:
void Close();
BOOL IsConnected();
static void Unintilize();
static void Initilize();
int Receive(char* lpData, int size);
int Send(char* lpData, int size);
BOOL Create(CString lpstrAddr, unsigned short port, HWND hWnd);
CMultiCast();
virtual ~CMultiCast();

private:
HWND m_hWnd;
SOCKET m_hSocket;
SOCKET m_hGroupSocket;
BOOL m_bConnected;

SOCKADDR_IN addr;
SOCKADDR_IN srcaddr;
};
awjx 2004-03-22
  • 打赏
  • 举报
回复
帮你顶一下
stonesky 2004-03-22
  • 打赏
  • 举报
回复
这样会出现网络风暴吗?我认为是程序有问题
romijn 2004-03-22
  • 打赏
  • 举报
回复
自己顶一下!
计算机网络应用基础 信息工程学院 网络应用基础课组 课程说明 教学目的: 掌握基本的网络知识,基本原理; 能够组建简单局域网; 能够设计简单网页,具备信息发布的能力; 培养基本的网络应用能力。 学习方法 知识学习:预习、复习、练习与思考、自学 操作能力:实习准备、实习过程、实习总结 教学要求 按时上课、认真听讲 按时实习、充分准备、认真操作、详细记录、 及时提交实习报告 课程考核 机试+平时考试 第1章 计算机网络基础知识 1.1 计算机网络的发展过程 1.2 计算机网络的基本概念 1.3 计算机网络的类型 1.4 计算机网络的体系结构 1.5 数据通讯基础 1.1 计算机网络的发展(了解) 计算机网络是计算机技术和通信技术结合的产物,主要经历了四个发展阶段: 第一阶段:20世纪50年代 终端-计算机网络 数据通信技术的研究与发展, 第二阶段:20世纪60年代 共享资源的计算机网络 ARPANET与分组交换技术的研究与发展。 第三阶段:20世纪70年代 标准化的计算机网络 网络体系结构与协议标准化的研究、广域网、 局域网与公用分组交换网的研究与应用。 第四阶段:20世纪90年代 国际化的计算机网络 网络计算技术的飞速发展。互连、高速、更为广泛的Internet技术应用为特点 。 一、计算机网络的发展阶段 二、计算机网络的应用 计算机网络的应用越来越普及,深入到社会的各个领域: 1.在科研与教育中的应用: (资料查询、学术交流、合作研究、远程教育、网上教学、网络讨论、网上考试等); 2.在企事业单位中的应用: (网上办公、资源共享、信息发布等); 3.在商业上的应用:(网上购物、电子商务); 4.在通信与娱乐上的应用: (电子邮件、网络讯寻呼、IP电话、网上聊天、BBS、新闻、网络游戏、网上电影、电视、音乐等)。 5.其它新的应用: 范围不断扩大、领域越来越宽、越来越深入。 1.2 计算机网络的基本概念 人们通常对"计算机网络"的定义是: 计算机网络是将分布在不同地理位置的具有独立功能的计算机系统,利用通信设备和线路相互连接起来,在网络协议和网络软件的支持下,进行数据通信、实现资源共享的系统。 1互连的计算机都是独立的"自治计算机" 一个计算机网络可以包含有多台具有"自治"功能的计算机,所谓的"自主"是指这些计算机离开计算机网络之后,也能独立地工作和运行。 通常将这些计算机称为"主机"(host),在网络中又叫做节点或站点。一般,在网络中的共享资源均分布在这些计算机中。 2 联网计算机之间通信必须遵循共同的网络协议 构成计算机网络时需要使用通信的手段,把有关的计算机(节点)"有机地"连接起来。所谓的"有机"地连接是指连接时彼此必须遵循所规定的约定和规则。这些约定和规则就是通信协议。 3 计算机网络建立的主要目的是实现计算机资源共享 在网络中的共享资源指:硬件资源、软件资源和数据资源。一般将计算机资源共享作为网络的最基本特征。 一、计算机网络定义的基本理解 二、计算机网络的组成 (一)计算机网络的系统组成 计算机系统:信息处理、提供网络资源 数据通信系统:完成数据通信控制与处理 计算机网络软件:网络协议软件 、网络通信软件、网络操作系统 、网络管理软件和网络应用软件。 1. 计算机系统 计算机系统(主机-host) 包括:大型机、中型机、小型机、工作站或微机。主机是资源子网的主要组成单元,它通过高速通信线路与通信子网相连接。 功能:主机要为本地用户访问网络其它主机设备与资源提供服务,完成数据信息处理,同时要为网中远程用户共享本地资源提供服务。按功能可分为服务器和工作站。 2. 数据通信系统 网络连接设备 主要实现网络中主机与主机、网络与网络之间的连接,数据信号转换以及路由选择等功能。 主要包括:(网卡)、中继器、集线器、调制解调器、网桥、交换机、路由器、网关等设备。 传输介质(通信线路) 传输介质是传输数据信号的物理通道,它将网络中各种设备连接起来。 计算机网络采用了多种通信线路,如电话线、双绞线、同轴电缆、光纤、无线通信信道、微波与卫星通信信道等。 3. 计算机网络的软件 网络操作系统 实现系统资源共享,管理用户的应用程序对不同资源的访问。典型的操作系统有Windows 2000 Sever、Netware、UNIX等。 网络协议软件 实现网络协议功能,比如TCP/IP、IPX/SPX等。 网络管理软件 用来对网络资源进行管理,对网络进行维护。 网络服务器软件 运行在特定的操作系统上,提供网络服务的软件。 网络应用软件 网络应用软件是为网络用户提供服务的,是网络用户在网络上解决实际问题的软件。 1. 计算机网络的逻辑组成 资源子网:资源子网由服务器、工作站、共享设备(打印机、网络硬盘)、各种软件资源与信息资源组成。资源子网负责全
校园网总体设计方案 【摘要】 当今社会,以信息通信技术为代表的科技革命,正在以前所未有的方式和速度改变 着我们的生活与学习。其中以计算机网络的发展更为突出,已深入我们生活的方方面 面,人类社会即将快速步入信息社会。校园计算机网络作为计算机整个网络系统的重 要组成部分,成为我们学习与接触得最多的网络之一,校园网络的建设已成为计算机 网络基础建设的重要内容。校园网络建设所使用的技术是以局域网技术为主的计算机 网络应用技术,校园网是学校进行教育科研教学、各项管理工作和各类信息交流沟通 的应用平台,是集相关软件和硬件设备于一体的具有综合功能的宽带计算机局域网, 为学校提供了一个日常教学、科研、管理和通讯的综合性应用环境。建设校园网的目 的是建设一个以计算机辅助教学、办公与管理自动化、现代计算机校园文化核心,以 现代网络技术为依托,技术先进、扩展性强,能覆盖全校主要楼宇的玄远主干网络, 将学校的各种服务器、工作站、终端和外部设备通过局域网络连接起来,并进一步与 广域网相连,向世界宣传自己和从Internet上获取教学资源,形成结构合理、内外沟 通的校园计算机网络系统,在此基础上建立能满足教学、管理和研究工作所需要的软 硬件环境,开发各类信息库和应用系统,为学校各类人员提供充分的网络信息服务。 校园网络的越来越重要,这样,它的设计也实现也就显得越来越重要,无论在速度方 面还是安全方面,都应该全面的考虑设计。本毕业设计主要是以建设校园网络的建设 与使用为主要内容,对其中所须用到的技术做一个分析和介绍。论文的主要内容有: 校园网的技术思想、技术方案,网络设备的选型以及校园网络的运行状况等,能使读 者对校园网络的建设有一个比较全面的了解! 第一章总体方案设计 一、设计目标: 一个完备的校园网,应在教师备课教学、学生学习、教务管理、行政管理、图书 资料管理、资源信息、对外交流等方面发挥辅助、支持功能,并通过与广域网的互连 ,为学校各方面提供全面切实的支持. 二、设计原则 系统总体设计应本着总体规划,分布实施的原则。具体如下: (一) 先进性:总体设计起点高,采用先进的计算机网络技术和管理模式,采用先进的网络 设计、网络结构、开发工具,技术上采用市场占有率高、标准化、且技术成熟的软硬 件产品 (二) 实用性:建网是应该既充分满足学校各方面的应用需求,有充分考虑到利用和保护现 有的资源,充分发挥设备效益,要保证主要系统和应用软件全中文界面,且功能完善 、界面友好、兼容性强,使用户能方便地实现各种功能; (三) 开放性:系统设计应采用开放设计、开放结构、开放系统组件和开放用户接口,以利 用于网络的维护、扩展升级和与外界信息的互通; (四) 适应性:采用积木式模块组合和结构化设计,是系统配置灵活,并使网络具有强大的 可增长性和强壮性,方便管理和维护; (五) 可扩展性:网络规划设计不仅要满足校园网不断发展的要求,还要满足因技术可发展 而实现低成本扩展和升级的需要; (六)可靠性:具有容错功能,能满足学校所在地的电磁环境、电力环境、气候条件 ,抗干扰能力强,对网络的设计、选型、安装、调试等各环节进行统一规划和分析, 确保系统运行可靠稳定; (七) 安全性:能提供多层次安全控制手段,建立完善的安全管理体系,防止数据受侵犯和 破坏,有可靠的防病毒措施; (八) 经济性:投资合理,使全系统有良好的性能价格比。 适当采用无线连接。在一些不便于布线或布线成本较高的场合,或为了满足用户更灵 活的联网需求,采用先进的无线局域网进行网络建设 三 、设计依据 (一) 校园网工程技术要求书。 (二)中国教育与科研计算机网络工程技术规范书。 (三)《中华人民共和国计算机信息网络国际互联网暂行规定》。 (四)有关的网络技术国家标准。 四、校园网总体建设内容 (一)连接校内所有教学楼、实验室、办公楼中的PC。 (二)同时支持上千名用户浏览Internet。    (三)提供丰富的网络服务,实现广泛的软件,硬件资源共享,包括:     1、提供基本的Internet网络服务功能:如电子邮件、文件传输、远程登录、新 闻组讨论、电子公告牌、域名服务等。     2、提供校内各个管理机构的办公自动化。    3、提供图书,文献查询与检索服务,增强校图书馆信息自动化能力。     4、全校共享软件库服务,发挥最大效益。     5、提供CAI教学和科研的便利条件。      6、提供国内外计算机系统的互连,为国际间的信息交流和科研合作,为学校快速 获得最新教学成果及技术合作等创造良好的信息通路。 (四)在实际的工程实施中,可以把校园网建设要求分割为以下几个部分: 1、高速的校园内部局域网建设   校园网的主干(即中心交换机与二级交换机之间的连接)采用千兆以太网技术,在距离 允许的范围内,还应

4,358

社区成员

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

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