UDP 组播/多播实现步骤

UDP组播

实现服务器对客户端分组播放(发送数据)。

实现步骤:

server.c

1、创建服务器套接字

#include <sys/types.h>

#include <sys/socket.h>

int socket(int domain, int type, int protocol);   返回套接字

2、构建服务器地址结构

struct sockaddr_in serveraddr;

#include <strings.h>

bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = AF_INET;

serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP

serveraddr.sin_port = htons(SERVER_PORT);//端口

3、绑定地址

int bind(int sockfd, const struct sockaddr *addr,

socklen_t addrlen);

4、构建组播属性结构

struct ip_mreqn group;

#include <arpa/inet.h>

inet_pton(AF_INET,GROUP,&group.imr_multiaddr);//设置组播地址

net_pton(AF_INET,"0.0.0.0",&group.imr_address);//设置本地地址

group.imr_ifindex=if_nametoindex("ent0");//设置网卡接口

5、设置组播权限和属性

setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,

sizeof(group));//设置组播权限及选项

6、设置客户端组播地址

struct sockaddr_in cliaddr;

bzero(&cliaddr,sizeof(cliaddr));

cliaddr.sin_family=AF_INET;

inet_pton(AF_INET,GROUP,&cliaddr.sin_addr.s_addr);

cliaddr.sin_port=htons(CLIENT_PORT);

7、发送数据

sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&cliaddr,

sizeof(cliaddr));//往组播地址发送信息,返回数据大小

client.c

1、创建客户端套接字

2、构建客户端地址结构

3、绑定地址

4、构建组播结构

5、设置组播权限和属性

6、接收数据

#include <sys/types.h>

#include <sys/socket.h>

len=recvfrom(confd,buf,sizeof(buf),0,NULL,0);//接收数据

时间: 2024-08-08 06:26:56

UDP 组播/多播实现步骤的相关文章

单播,组播(多播),广播以及任播

目录 [+] 单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式.它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议.组播(multicast): 也叫多播, 多点广播或群播. 指把信息同时传递给一组目的地址.它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制.广播(broadcast):是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式.实际上,

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

JAVA实现UDP组播聊天程序

分类: Java 一.实验环境 编程语言:Java1.5(运行在JVM(Java Virsual Machine)) 开发工具:eclipce3.2 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: /** * 该程序实现了

Android对UDP组播接收数据的有限支持(一)

最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 1 package com.hsocket.Udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 7 public class UdpReceiv

C# 使用UDP组播实现局域网桌面共享

最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类的内容,不含视频. 1)抓屏 参考了网上找到的一段代码如下 static BitmapSource CopyScreen() { using (var screenBmp = new Bitmap((int)SystemParameters.PrimaryScreenWidth, (int)Syst

(转)C# 使用UDP组播实现局域网桌面共享

转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类的内容,不含视频. 1)抓屏 参考了网上找到的一段代码如下 static BitmapSource CopyScreen() { using (var screenBmp = new Bitmap((int

网络中有三种通讯模式:单播、广播、组播(多播)

当前的网络中有三种通讯模式:单播(Unicast).组播(多播)(Multicast).广播(Broadcast),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播: 主机之间"一对一"的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制.如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作.但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议.网络中的路由器和交换机根据其目标地址选择传输路径,将IP单

UDP组播相关

Windows服务端 #include "stdafx.h" #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <stdlib.h> #define MCASTADDR "239.255.255.239" //本例使用的多播组地址. #define MCASTPORT 9111 //绑定的本地端口号. #define BUFS

浅谈Android中的组播(多播)

组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IPv4中组播地址范围为224.0.0.0到239.255.255.255. 注意的问题:     1. 在发送组播或则在接收组播的时候,一定要开启一个线程,要不然会出问题.例如在发送组播时候,不要再UI线程中去发,要开启一个子线程去发送.  2. 接收的组播要先加入,然后再能接受到组播发出的的消息.遵