打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

我们在编制网络应用程序时,经常需要将一份消息同时发送给网络上的所有用户,这叫做消息的广播。网络消息的广播技术在编制多媒体网上演示、网络会议等程序时有重要的意义。

一、技术要点分析

本文所介绍的网络技术是利用IP协议中的特殊地址实现的。IP协议是建立TCP/IP网络的最基本协议,它定义了在整个TCP/IP网络上传输数据所用的基本单元。

在使用TCP/IP协议的网络环境中,一台计算机有一个主机地址,同时,一个网络也被分配了一个网络地址(见表1)。

为了方便处理一些特殊的数据发送要求,IP协议中定义了一套自己保留的特殊IP地址,称为保留地址,保留的IP地址是从不分配给某台特定的主机的。

注:在IP地址中,可分成网络标识符及主机编号两部分。例如一个C类地址192.168.1.1,则它的网络标识符为192.168.1,主机编号为1。所有的保留IP地址只能当作源地址使用。

TCP/IP协议规定,主机编号各位全为“1”的网址用于广播之用,叫广播地址。网络标识符和主机编号的32比特位全为“1”的网址用于本网广播,该地址叫作有限广播地址(linited broadcast address)。主机在启动过程中,往往不知道本网的网址(即本网网络号),这时候,若想向本网广播,只能采用有限广播地址。在协议中规定,各位全为“0”的网址被解释成“本”网络。若主机试图在本网内通信,而又不知道本网网络号,可以利用该地址。

我们在利用保留IP地址进行网络广播时,将使用网络的直接广播地址。由于程序是基于IP协议编写的,因此编程时要使用Socket编程,而不使用WININET。

二、范例程序的实现与代码分析

我们利用Visulal C++ 的向导生成一个基于对话框的程序,命名为NetBrocast。

利用ClassWizard为程序加入一个基类为CAsyncSocket,并命名为CServerSocket的类。其源程序代码如下:

1.定义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

};

2.编写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++;

}

3.编写主对话框代码的头文件

……

//省略的机器生成代码

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()

};

4.编写主对话框代码的实现文件

#include "serverSocket.h"

……

//省略的机器生成代码

BOOL CNetBrocastDlg::OnInitDialog()

{

jp……

//省略的机器生成代码

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();

}

注:. 主机编号为0 192.168.0.0 网络的伯克利广播

主机编号全1 192.168.0.255 网络的直接广播。
 
(#)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
本机ip、127.0.0.1和0.0.0.0区别
由IP地址和子网掩码计算出网络地址和广播地址
如何计算网络地址和广播地址
特殊用途的IP地址介绍
IP地址的计算
一道题让你永远记住IP地址及子网掩码怎么算
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服