织梦CMS - 轻松建站从此开始!

罗索

利用特殊IP地址实现网络广播

罗索客 发布于 2001-11-17 10:36 点击:次 
我们在编制网络应用程序时,经常需要将一份消息同时发送给网络上的所有用户,这叫做消息的广播。网络消息的广播技术在编制多媒体网上演示,网络会议等程序时有重要的意义。 程序中的技术要点分析 本文中所介绍的网络技术是利用IP协议中的特殊地址实现的。IP协议是建立TC
TAG:

我们在编制网络应用程序时,经常需要将一份消息同时发送给网络上的所有用户,这叫做消息的广播。网络消息的广播技术在编制多媒体网上演示,网络会议等程序时有重要的意义。
程序中的技术要点分析
本文中所介绍的网络技术是利用IP协议中的特殊地址实现的。IP协议是建立TCP/IP网络的最基本协义,它定义了在整个TCP/IP网络上传输数据所用的基本单元。
在使用TCP/IP协议的网络环境中,一台计算机有一个主机地址,同时,一个网络也被分配了一个网络地址。为了方便处理一些特殊的数据发送要求,IP协议中定义了一套保留的特殊IP地址,称为保留地址,保留的IP地址是从不分配给某台特定的主机的。
保留IP地址格式 示例 说明
全0 000.000.000.000 本地网络上的本主机
网络标识符为0 . 主机编号为 000.000.000.1 本地网络上的特定编号的主机
网络标识符 . 主机编号为0 192.168.0.0 网络的伯克利广播
全1 255.255.255.255 本地网的有限广播
网络标识符 . 主机编号全1 192.168.0.255 网络的直接广播
127 . 任意 127.0.0.0 本地环路

注:在IP地址中,可分成网络标识符及主机编号两部分。例如一个C类地址192.168.1.1,则它的网络标识符为192.168.1,主机编号为1。所有的保留IP地址只能当作源地址使有。
我们在利用保留IP地址进行网络广播时,将使用网络的直接广播地址。由于程序基于IP协议,因此编程时要使用SOCKET编程,而不使用WININET(虽然WININET使用起来非常方便,但对付真正应用INTERNET协议的编程操作时,有点力不从心)
二、范例程序的实现与代码分析
我们利用Visulal C++ 的向导生成一个基于对话框的程序,命名为NetBrocast。修改主对话框如右图。利用ClassWizard为程序加入一个基类为CAsyncSocket的名为CServerSocket的新类。修改程序中的代码如下:(黑体部分为应由用户手工加入的代码)
//代码段一,CServerSocket类的头文件定义
……//省略的机器生成代码
class CServerSocket : public CAsyncSocket
{
……//省略的机器生成代码
public: //为了支持多用户,我们为每一个申请连接的客户端生在一个Socket
UINT OrderList; //连接后的Socket序列号
CServerSocket* SendSocket[255]; //连接后的Socket数组
//{{AFX_VIRTUAL(CServerSocket)
public:
virtual void OnAccept(int nErrorCode); //重载它的响应连接函数
//}}AFX_VIRTUAL
};
//代码段二,CServerSocket类的实现文件
……//省略的机器生成代码
CServerSocket::CServerSocket()
{ //初始Socket序列号
OrderList=0;
}
……//省略的机器生成代码
void CServer::OnAccept(int nErrorCode) //响应连接请求的消息函数
{//接受客户端发出的连接请求,完成连接,实现一个可发收数据的Socket
SendSocket[OrderList]=NULL;
SendSocket[OrderList]=new CServerSocket(); //初始化一个新的Socket
this->Accept(*(SendSocket[OrderList])); //生成一个新的连接后的Socket
OrderList++;
}
//代码段三,主对框代码的头文件
……//省略的机器生成代码
class CServerSocket;
class CNetBrocastDlg : public CDialog
{
public:
CServerSocket* ServerSocket;
……//省略的机器生成代码
//{{AFX_DATA(CNetBrocastDlg)
enum { IDD = IDD_NETBROCAST_DIALOG };
CEdit m_SendMessge; //装载要发送的信息的编辑框
//}}AFX_DATA
……//省略的机器生成代码
//{{AFX_MSG(CNetBrocastDlg)
virtual BOOL OnInitDialog(); //响应初始化
……//省略的机器生成代码
afx_msg void OnSend(); //响应按钮“Send”的操作
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//代码段四,主对框代码的实现文件,
#include “serverSocket.h”
……//省略的机器生成代码
BOOL CNetBrocastDlg::OnInitDialog()
{
……//省略的机器生成代码
ServerSocket=new CServerSocket(); //生成一个ServerSocket类,开始
ServerSocket->Create(1024,SOCK_STREAM); //倾听连接
ServerSocket->Listen();
return TRUE; }
//下面的这个函数是按钮“Send”的响应函数,该函数将向网络上所有主机广播消息
void CNetBrocastDlg::OnSend()
{
CString String;
m_SendMessge.GetWindowText(String);
//下面这行代码将向C类地址中的网络标识为“192.168.0”的网络进行广播
ServerSocket->SendSocket[0]->SendTo(String,String.GetLength(),
1024,"192.168.0.255",0);
}
//下面的函数响应按钮“Quit”的单击操作,退出程序。
void CNetBrocastDlg::OnOK()
{
ServerSocket->Close(); //关闭Socket
CDialog::OnOK();
}
编译完成后,得到网络广播的服务器端的演示程序。它将会把填在编辑框中的消息在网络中广播出去。
以上程序在VC++6.0,中/英文Windows 98上编译通过,运行正常。
作者电邮:Alexandrite@cmmail.com 下载代码
 
 
作者姓名: 苏水荣
作者地址:广东省韶关市韶关教育学院98计算机(1)班
邮 编: 512026
电 话: 0751-8626470 (jacky)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200111/709.html]
本文出处: 作者:jacky
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容