好玩的网络编程小程序之组播

编程入门 行业动态 更新时间:2024-10-26 01:17:47

好玩的<a href=https://www.elefans.com/category/jswz/34/1768814.html style=网络编程小程序之组播"/>

好玩的网络编程小程序之组播

学习网络编程最大的乐趣就是能够实现跨主机的交流,不得不说,在开始实现这个功能的时候的确能够带来非常之多的成就感。那么怎么才能够实现这种功能呢?今天就给大家带来一个非常不错的方式,组播!

在使用组播的时候,我们需要先了解一下目前的IP地址。目前IPv4主要分为以下几类

PV4地址分类
(适用于大型网络)A类:(以0开头)1个字节的网络地址 ,3个字节的主机地址
网络二进制:0000 0000 0000 0000 0000 0000 0000 0001   - 0111 1111 1111 1111 1111 1111 1111 1110
点分十进制:            0.0.0.1            --    127.255.255.254注意:IP中有两个地址不能用:地址全为0的  :网络ID号地址全为1的  :广播地址
(适用于中型网络)  B类:(以10开头)
2个字节的网络地址,2个字节的主机地址 
网络二进制:1000 0000 0000 0000 0000 0000 0000 0001   - 1011 1111 1111 1111 1111 1111 1111 1110
点分十进制:            128.0.0.1            --    191.255.255.254
(适用于小型网络)  C类:(以110开头)3个字节的网络地址,1个字节的主机地址
网络二进制:1100 0000 0000 0000 0000 0000 0000 0001   - 1101 1111 1111 1111 1111 1111 1111 1110
点分十进制:            192.0.0.1    (组播地址)  D类:(以1110开头)4个字节的网络地址,0个字节的主机地址
网络二进制:1110 0000 0000 0000 0000 0000 0000 0001   - 1110 1111 1111 1111 1111 1111 1111 1110
点分十进制:            224.0.0.1            --    239.255.255.254    
(保留地址)  E类:(以11110开头)

从这里可以得知,组播的地址为224.0.0.1        ~        239.255.255.254

知道IP地址之后,下面就是实操部分了。

实操分为两部分,分别是发送部分和接受部分

        发送部分                        接受部分

        声明套接字                        声明套接字        

        允许发送广播                    绑定组播地址

        声明组播地址                     将自己IP加入到组播组中

       往组播地址发送信息             接受信息

组播采用的是报文的方式进行传输,所以在创建管街字的时候需要注意创建报名式的管接字。

先进行发送部分

第一步,声明套接字,主要使用的函数是socket,函数原型如下

#include#includeint socket(int domain, int type, int protocol);功能: 创建一个具有网络属性的文件描述符 产生socket套接字参数:
domain:地址族:AF_UNIX, AF_LOCAL 本地连接协议AF_INET IPv4AF_INET6 IPv6type:协议:SOCK_STREAM 流式套接字 --- TCP协议SOCK_DGRAM 数据报文套接字 --- UDP协议SOCK_RAW 原始套接字 --- 不需要任何协议 ---不安全protocol:参数生效值默认为0 --- 代表前两个参数生效返回值:成功返回套接字文件描述符失败返回-1,并设置错误码

创建套接字之后,要注意先允许发送组播。格式如下

 

声明组播,具体操作如下。

这里需要注意,因为sockaddr自带的结构体不太实用,所以采用struct sockaddr_in 结构体来替代。这个结构体的参数第一个是地址族,第二个是端口号,第三个是IP地址,

 声明之后,就能够调用发送函数了sendto了,这个函数的参数第一个是sockfd,第二个是存储数据的数组,第三个数据是数组长度,第四个参数为0,表示可阻塞,第五个参数是替换的结构体,因为替换过了,所以需要进行强转操作。第六个参数是addr的长度

 做到这里,整个发送端就结束了。

接受端

接收端创建套接字是一样的步骤,所以不做赘述。

创建套接字之后,就需要进行绑定了。这时候需要使用的是bind函数。使用这个函数的时候需要注意,它自己自带的结构体不适用,但是有一个可替代的结构体。

#include /* See NOTES */#includeint bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);功能:给sockfd绑定IP和端口号参数:sockfdaddr:结构体指针,是需要用来赋值的addrlen:addr的长度返回值:成功返回0失败返回-1,并设置错误码

 即上面这个结构体,第一个参数为地址族,第二个参数为端口号,第三个参数为组播的IP地址。

 使用的时候需要注意,因为是使用的替代结构体,所以传参的时候需要进行强转。具体操作如上。

接下来就是最难的一部分,将其加入组播中,这个时候就需要调用setsockopt

#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname,//设置套接字的属性const void *optval, socklen_t optlen);功能: 设置sockfd的属性 参数: sockfd level:等级 optname:选项 optval:选项取值 optlen:值的长度

该函数的第四个值是一个结构体,所以使用的时候需要调用结构体,即如下操作

 

作为之后,就是发送操作了,这个发送操作需要调用recvform函数,这个函数需要注意,最后一个参数的值是一个指针类型,所以需要取地址。但是其他参数基本和sendto一致。

 昨晚之后就能够实现通信了。

具体操作如下:一边发送,一边能够实现接受

 

更多推荐

好玩的网络编程小程序之组播

本文发布于:2024-03-23 17:59:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741126.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网络编程   好玩   组播   程序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!