龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++实现局域网IP多播效果(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
二、编程步骤 1、启动Visual C++6.0,创建一个控制台项目工程MultiCase。在此项目工程中添加Sender和Receiver两个项目。 Receiver项目实现步骤: (1)创建一个SOCK_

  二、编程步骤

  1、启动Visual C++6.0,创建一个控制台项目工程MultiCase。在此项目工程中添加Sender和Receiver两个项目。

  Receiver项目实现步骤:

  (1)创建一个SOCK_DGRAM类型的Socket。

  (2)将此Socket绑定到本地的一个端口上,为了接收服务器端发送的多播数据。

  (3)加入多播组。

  ①WinSock2中引入一个WSAJoinLeaf,此函数原型如下:

SOCKET WSAJoinLeaf( SOCKET s, const struct sockaddr FAR *name, int namelen, 
LPWSABUF lpCallerData, LPWSABUF lpCalleeData, LPQOS lpSQOS, LPQOS lpGQOS, DWORD dwFlags );

  其中,第一个参数s代表一个套接字句柄,是自WSASocket返回的。传递进来的这个套接字必须使用恰当的多播标志进行创建;否则的话WSAJoinLeaf就会失败,并返回错误WSAEINVAL。第二个参数是SOCKADDR(套接字地址)结构,具体内容由当前采用的协议决定,对于IP协议来说,这个地址指定的是主机打算加入的那个多播组。第三个参数namelen(名字长度)是用于指定name参数的长度,以字节为单位。第四个参数lpCallerData(呼叫者数据)的作用是在会话建立之后,将一个数据缓冲区传输给自己通信的对方。第五个参数lpCalleeData(被叫者数据)用于初始化一个缓冲区,在会话建好之后,

  接收来自对方的数据。注意在当前的Windows平台上,lpCallerData和lpCalleeData这两个参数并未真正实现,所以均应设为NULL。LpSQOS和lpGQOS这两个参数是有关Qos(服务质量)的设置,通常也设为NULL,有关Qos内容请参阅MSDN或有关书籍。最后一个参数dwFlags指出该主机是发送数据、接收数据或收发兼并。该参数可选值分别是:JL_SENDER_ONLY、JL_RECEIVER_ONLY或者JL_BOTH。

  ②在WinSock1平台上加入多播组需要调用setsockopt函数,同时设置IP_ADD_MEMBERSHIP选项,指定想加入的那个组的地址结构。具体实现代码将在下面代码注释列出。

  (4)接收多播数据。

  Sender实现步骤:

  (1)创建一个SOCK_DGRAM类型的Socket。

  (2)加入多播组。

  (3)发送多播数据。

  3、编译两个项目,在局域网中按如下步骤测试:

  (1)将Sender.exe拷贝到发送多播数据的pc上。

  (2)将Receiver.exe拷贝到多个要求接收多播数据的pc上。

  (3)各自运行相应的程序。 

  (4)在Sender PC上输入多播数据后,你就可以在Receiver PC上看到输入的多播数据。

精彩图集

赞助商链接