c实现 udp通信

这篇具有很好参考价值的文章主要介绍了c实现 udp通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建对象

int udp_socket = socket(AF_INET,SOCK_DGRAM,0);

AF_INET    网络通信协议

SOCK_DGRAM  传输协议

属性默认 0

2.想接收信息就需要绑定地址信息

struct sockaddr_in server_addr ;
server_addr . sin_family = AF_INET ;
server_addr . sin_port = htons ( 端口 ); //自选
server_addr . sin_addr . s_addr = INADDR_ANY ; //
有网卡地址
bind ( udp_socket , ( struct sockaddr * ) & server_addr sizeof ( server_addr ));
3.接收信息

  struct sockaddr_in clien_addr; //可以获取发送端信息

 int len=sizeof(clien_addr);

recvfrom(udp_socket,buf,1024,0,(struct sockaddr *)&clien_addr,&len);

如不需要获取发送端信息就

recvfrom(udp_socket,buf,1024,0,NULL,NULL);

4.发送信息

(需要接收端的信息才能发送,设置发送结构体)

        struct sockaddr_in dest_addr;

        dest_addr.sin_family = AF_INET;

        dest_addr.sin_port   = htons(3021);

        dest_addr.sin_addr.s_addr = INADDR_ANY; //或 inet_addr("192.168.64.183") 根据具体网址

        sendto(udp_socket,buf,strlen(buf),0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));

5.关闭

close(udp_socket);

udp 开启组播

(组播相当于开启群聊)

1.创建对象

int udp_socket = socket ( AF_INET , SOCK_DGRAM , 0 );
2.绑定对象
struct sockaddr_in server_addr ;
server_addr . sin_family = AF_INET ;
server_addr . sin_port = htons ( 端口 );
server_addr . sin_addr . s_addr = INADDR_ANY ; // 所 有网卡地址
bind ( udp_socket ,( struct sockaddr * ) & server_addr , sizeof ( server_addr ));
3.加入组播

    struct ip_mreq a;  //组播结构体  

    bzero(&a, sizeof(a));

    a.imr_interface.s_addr = INADDR_ANY; //所有网卡地址加入组播

    a.imr_multiaddr.s_addr = inet_addr("224.10.10.10"); // 指定多播地址

setsockopt(udp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &a, sizeof(a));

struct ip_mreq
{
struct in_addr imr_interface ; /* 需要加入组 播的IP 地址 */
struct in_addr imr_multiaddr ; /* 组播地址 (D 类地址) */
};
D 类地址 : 224.0 . 0.1 ~ 239.255 . 255.255
// 组播结构体
struct in_addr
{
in_addr_t s_addr ;
};

4.接收与发送

recvfrom(udp_socket,buf,1024,0,NULL,NULL);          // 还是直接用udp对象就可以接收

 

   struct sockaddr_in arry_addr;  // 将发送到对象的结构体

   arry_addr.sin_family=AF_INET;

  arry_addr.sin_port=htons(8888);

 arry_addr.sin_addr.s_addr=inet_addr("224.10.10.10"); 

 sendto(udp_socket,buf,strlen(buf),0,(struct sockaddr *)&arry_addr,sizeof(arry_addr));

(需注意设置结构体需要与绑定对象的端口相同,网址为设置组播的网址)

udp广播

1.创建对象

int udp_socket = socket ( AF_INET , SOCK_DGRAM , 0 );
2.开启广播(即设置为广播属性)

    int on=1; //开启

  setsockopt(udp_socket,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));

3.发送广播信息

    struct sockaddr_in dest_addr;

    dest_addr.sin_family=AF_INET; //设置网络协议

    dest_addr.sin_port=htons(6666); //所有处于当前网段且,端口为 6666 的进程都可以收到数据

                                                        //即192.168.64网段的都能收到

    dest_addr.sin_addr.s_addr=inet_addr("192.168.64.255"); //设置广播地址 

    sendto(udp_socket,"hello",5,0,(struct sockaddr *)&dest_addr,sizeof(dest_addr));文章来源地址https://www.toymoban.com/news/detail-402720.html

到了这里,关于c实现 udp通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • tcp/udp socket 网络通信中超时时间的设置

    1.connect函数的超时时间设置只对TCP有效 UDP由于是无连接的connect都会返回success 有两种方法: 第一种方法 默认的socket是阻塞模式 我们只需要设置其为非阻塞模式,然后调用select去查询其状态 代码如下:  第二种是 默认其为阻塞模式  通过setsockopt 函数设置TCP_SYNCNT 值 头文件

    2024年02月15日
    浏览(42)
  • unity Sockets通信 使用UDP协议,设置客户端电脑网络配置,使用新线程获取数据,解决卡顿问题,

    今天调试和服务器连接,发现始终获取不到服务器的数据, 电脑和服务器都在同一局域网,仍然获取不到, 下面是电脑环境配置, 第一步: 设置网络为专用网络,然后点击配置防火墙和安全设置,关闭防火墙 (点击所连接的wifi的属性) 第二步:设置出站 入站规则 点击高

    2024年02月07日
    浏览(60)
  • 树莓派学习:建立socket进行网络通信+tcp+udp+端口+字节序+socketAPI+地址转换API+聊天对话框实战

    目录 socket套接字网络通信学习 数据协议 tcp udp ip地址 端口 字节序 步骤  API介绍 地址转换API 实战  聊天对话框 服务器  运行时后面要传IP地址和端口 客户端   运行时后面要传IP地址和端口 socket是网络通信,通信的数据协议有http、tcp、udp等等,简单来说就是传输数据的格式

    2024年02月05日
    浏览(54)
  • C++实现socket网络通信

    🍺SOCKET网络通信系列文章链接如下:🍺 🎈【小沐学python】(一)Python简介和安装🎈 🎈Python实现socket网络通信🎈 🎈C++实现socket网络通信🎈 🎈Android实现socket网络通信🎈 🎈nodejs实现socket网络通信🎈 《斗诗篇》 陈献章: 窗外竹青青,窗间人独坐。 究竟竹与人,原来无两

    2023年04月09日
    浏览(39)
  • Unity实现网络通信(UDP)

    UDP通信特点:         无连接,多对多         不可靠         面向数据报         效率高 UDP中的分包与黏包 分包:一段数据被分为两段或多段传输,在UDP通信方式中,因为UDP的不可靠性无法保证有序传输,因此尽量避免UDP自动分包。         其中一种方式是保证消

    2024年02月04日
    浏览(41)
  • 【JavaEE】_基于UDP实现网络通信

    目录 1. 服务器 1.1 实现逻辑 1.2 代码 1.3 部分代码解释 2. 客户端 2.1 实现逻辑 2.2 代码 2.3 客户端部分代码解释 3. 程序运行结果 4. 服务器客户端交互逻辑 普通服务器:收到请求,根据请求计算响应,返回响应; 回显服务器:忽略计算,直接将收到的请求作为响应返回; (

    2024年01月21日
    浏览(42)
  • Java网络编程-Socket实现数据通信

    本文主要是为下一篇Websockt做铺垫,大家了解socket的一些实现。 网络编程是指利用计算机网络进行程序设计、开发的技术。网络编程主要包含三个要素,分别是: IP地址和端口号 传输协议 Socket 在计算机网络中,每台计算机都有一个IP地址,用于唯一标识该计算机在网络中的

    2024年02月10日
    浏览(45)
  • 基于UDP/TCP的网络通信编程实现

    红色是心中永不褪色的赤诚 操作系统为网络编程提供了 Socket api , Socket是基于TCP/IP协议的网络通信的基本单元, 基于Socket的网络程序开发就是 网络编程. 由于直接与应用层联系的是传输层, 所以针对应用层协议(TCP, UDP), Shocket提供了三种套接字, 分别是 流套接字(使用TCP) , 数据报

    2024年02月08日
    浏览(55)
  • 【QT网络编程】实现UDP协议通信

    Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了 一种无需建立连接就可以发送封装的 IP 数据包的方法 。RFC 768 描述了 UDP。 UDP协议根据消息传送模式可以分为: 单播(Unicast)、组播(Multicast)和广播(

    2024年02月02日
    浏览(56)
  • Linux之套接字UDP实现网络通信

    ​ 套接字(Socket)是计算机网络中实现网络通信的一种 编程接口 。它提供了应用程序与网络通信之间的一座桥梁,因为它允许应用程序通过网络发送和接收相应的数据以实现不同主机之间的通信。 ​ 通常套接字由以下两部分组成: 1.网络IP和端口号 :IP用来标识主机,而端口

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包