UDP编程之三

三、组播模型

muticast.c

 1 #include <apue.h>
 2
 3 #define PORT 8088
 4
 5 #define MULTIIP "225.0.0.1"
 6
 7 int main(int argc,char **argv)
 8 {
 9     if(argc!=2)
10     {
11         printf("%s <msg>\n",argv[0]);
12         exit(0);
13     }
14
15     int sockfd;
16     if((sockfd = socket(AF_INET,SOCK_DGRAM,0))<0)
17         ERR("socket failed");
18
19     struct sockaddr_in peer;
20     CLEAR(peer);
21     peer.sin_family = AF_INET;
22     peer.sin_port = htons(PORT);
23     inet_pton(AF_INET,MULTIIP,&peer.sin_addr);
24
25     if(sendto(sockfd,argv[1],strlen(argv[1]),0,(struct sockaddr*)&peer,sizeof(peer))<0)
26         ERR("send failed");
27
28     close(sockfd);
29     return 0;
30 }

recv.c

 1 #include <apue.h>
 2
 3 #define PORT 8088
 4 #define MULTIIP "225.0.0.1"
 5
 6 int main(int argc,char **argv)
 7 {
 8     int sockfd;
 9     if((sockfd = socket(AF_INET,SOCK_DGRAM,0))<0)
10         ERR("socket failed");
11
12     struct sockaddr_in ipv4;
13     CLEAR(ipv4);
14     ipv4.sin_family = AF_INET;
15     ipv4.sin_port = htons(PORT);
16     ipv4.sin_addr.s_addr = htonl(INADDR_ANY);
17     if(bind(sockfd,(struct sockaddr*)&ipv4,sizeof(ipv4))<0)
18         ERR("bind failed");
19
20     //加入组
21     #if 0
22     struct ip_mreq{
23         struct in_addr imr_multiaddr;   /* IP multicast address of group */
24         struct in_addr imr_interface;   /* local IP address of interface */;
25     }
26     #endif
27     struct ip_mreq mreq;
28     inet_pton(AF_INET,MULTIIP,&mreq.imr_multiaddr);
29     mreq.imr_interface.s_addr = INADDR_ANY;
30     if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))<0)
31         ERR("setsockopt failed");
32
33     int n;
34     char buf[255];
35     while(1)
36     {
37         if((n = recvfrom(sockfd,buf,sizeof(buf),0,NULL,NULL))<0)
38             ERR("recv failed");
39         buf[n] = 0;
40         printf("%s\n",buf);
41     }
42
43     //离开组
44     if(setsockopt(sockfd,IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq))<0)
45         ERR("setsockopt failed");
46
47     close(sockfd);
48     return 0;
49 }

UDP编程之三

时间: 2024-10-14 11:11:43

UDP编程之三的相关文章

socket编程之三:socket网络编程中的常用函数

这节本来打算先给出常用函数介绍,再给两个代码实例,写着写着发现越来越长,决定把代码放在下一节. 本节内容持续更新...... 1 socket()函数 原型: int socket(int domain, int type, int protocol); 描述: 类似打开一个文件,返回一个socket描述符,唯一标识一个socket,后面相应的操作都是这用这个socket描述符. 参数: domain:协议族,常用的协议族有AF_INET.AF_INET6.AF_LOCAL.AF_ROUTE等:

udp编程的学习

最近在做一个网络应用小程序(虽然很烦应用层编程...),实现视频数据通过网络无限发送,不关有无网络,数据都发出,用于产品的老化测试. 起初代码是用TCP写的,TCP有连接,产品作为server,起一个监控connect线程,有client连接,监控线程告诉主线程,主线程就将数据发出,没有client连接,主线程则将数据抛空. 但是有这样一个需求,用户插入网线后,PC端的client接收数据,然后强制拔掉网线,这时server还要一直在发送数据(数据是发出还是抛空无所谓),这样实现产品的长时间运行

Socket编程实践(12) --UDP编程基础

UDP特点 无连接,面向数据报(基于消息,不会粘包)的数据传输服务; 不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *a

Linux下的socket编程实践(十) 基本UDP编程细节

在我的这两篇博客中,简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. http://blog.csdn.net/nk_test/article/details/47733307 http://blog.csdn.net/nk_test/article/details/47756381 下图是一个简单的UDP客户/服务器模型: 我在这里也实现了一个简单的UDP回射服务器/客户端: /**实践: 实现一个基

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc

Linux学习四:UDP编程(上)

关于UDP和TCP对比优缺,这里就不说了. 使用UDP代码所掉用的函数和用于TCP的函数非常类似,这主要因为套接口库在底层的TCP和UDP的函数上加了一层抽象,通过这层抽象使得编程更容易,但失去了一些控制. 二者函数调用唯一的实际区别是soceket函数调用的一个参数,TCP的是SOCK_STREAM,UDP的是SOCK_DGRAM,二者都可以使用recvfrom函数,而recv只用于TCP. 当然函数的变化不是这么简单,因为你要从一种有连接的协议转向到无连接的协议上去.这里写个很简单直接的UD

Linux 网络编程——UDP编程

概述 UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议.UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地.由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快. UDP 有如下的特点: 1)邮件系统服务模式的抽象(可通过邮件模型来进行对比) 2)每个分组都携带完整的目的

基于Linux下的UDP编程

一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: Ø  建立套接字 Ø  将套接字地址结构进行绑定 Ø  读写数据 Ø  关闭套接字 2.客户端程序包括: Ø  建立套接字 Ø  读写数据 Ø  关闭套接字 3.服务器端和客户端程序之间的差别 服务器端和客户端两个流程之间的主要差别在于对地址的绑定函数(bind()函数),而客户端可以不用进行地址和端口的绑定操作. 二.Linux中UDP套接字函数  从图可知,UDP协议的服务端程序

Node.js开发入门—UDP编程

Node.js也提供了UDP编程的能力,相关类库在"dgram"模块里. 与TCP不同,UDP是无连接的,不保障数据的可靠性,不过它的编程更为简单,有时候我们也需要它.比如做APP的统计或者日志或者流媒体,很多流媒体协议都会用到UDP,网上一搜一大堆. 使用UDP,如果你要发送数据,只需要知道对方的主机名(地址)和端口号,扔一消息过去即可.至于对方收不收得到,听天由命了.这就是数据报服务,类似快递或邮件. 我们这次来介绍一下Node.js里的UDP编程,我会提供一个UDP版本的echo