uv_send(发送端):

  1. #include "uv.h"
  2. #include "task.h"
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. static uv_udp_t client;
  9.  
  10. static uv_loop_t *loop;
  11.  
  12. static void alloc_cb(uv_handle_t* handle,
  13. size_t suggested_size,
  14. uv_buf_t* buf)
  15. {
  16. static char slab[];
  17. buf->base = slab;
  18. buf->len = sizeof(slab);
  19. }
  20.  
  21. static void close_cb(uv_handle_t* handle)
  22. {
  23. uv_is_closing(handle);
  24. }
  25.  
  26. static void cl_recv_cb(uv_udp_t* handle,
  27. ssize_t nread,
  28. const uv_buf_t* buf,
  29. const struct sockaddr* addr,
  30. unsigned flags)
  31. {
  32. if (nread < )
  33. {
  34.  
  35. }
  36.  
  37. if (nread == )
  38. {
  39. return;
  40. }
  41.  
  42. printf("I receive the message from server:%s\n", buf->base);
  43.  
  44. uv_close((uv_handle_t*) handle, close_cb);
  45. }
  46.  
  47. static void cl_send_cb(uv_udp_send_t* req, int status)
  48. {
  49. uv_udp_recv_start(req->handle, alloc_cb, cl_recv_cb);
  50. }
  51.  
  52. int main(void)
  53. {
  54. struct sockaddr_in addr;
  55. uv_udp_send_t req;
  56. uv_buf_t buf;
  57. int r;
  58.  
  59. loop = uv_default_loop();
  60.  
  61. r = uv_ip4_addr("0.0.0.0", , &addr);
  62. r = uv_udp_init(loop, &client);
  63. r = uv_udp_bind(&client, (const struct sockaddr*) &addr, );
  64. r = uv_udp_set_broadcast(&client, );
  65. uv_ip4_addr("255.255.255.255", , &addr);
  66. buf = uv_buf_init("PING", );
  67. printf("I am sending message to server:%s.\n", buf.base);
  68. uv_udp_send(&req,
  69. &client,
  70. &buf,
  71. ,
  72. (const struct sockaddr*) &addr,
  73. cl_send_cb);
  74.  
  75. uv_run(loop, UV_RUN_DEFAULT);
  76.  
  77. return ;
  78. }

uv_recv(接收端):

  1. #include "uv.h"
  2. #include "task.h"
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. static uv_loop_t *loop;
  9. static uv_udp_t server;
  10.  
  11. static void alloc_cb(uv_handle_t* handle,
  12. size_t suggested_size,
  13. uv_buf_t* buf)
  14. {
  15. static char slab[];
  16.  
  17. buf->base = slab;
  18. buf->len = sizeof(slab);
  19. }
  20.  
  21. static void close_cb(uv_handle_t* handle)
  22. {
  23. uv_is_closing(handle);
  24. }
  25.  
  26. static void sv_send_cb(uv_udp_send_t* req, int status)
  27. {
  28. uv_close((uv_handle_t*) req->handle, close_cb);
  29. free(req);
  30. }
  31.  
  32. static void sv_recv_cb(uv_udp_t* handle,
  33. ssize_t nread,
  34. const uv_buf_t* rcvbuf,
  35. const struct sockaddr* addr,
  36. unsigned flags)
  37. {
  38. uv_udp_send_t* req;
  39. uv_buf_t sndbuf;
  40.  
  41. if (nread < )
  42. {
  43.  
  44. }
  45.  
  46. if (nread == )
  47. {
  48. return;
  49. }
  50.  
  51. printf("I receive the message from client:%s.\n", rcvbuf->base);
  52.  
  53. uv_udp_recv_stop(handle);
  54.  
  55. req = malloc(sizeof *req);
  56.  
  57. sndbuf = uv_buf_init("PONG", );
  58. uv_udp_send(req, handle, &sndbuf, , addr, sv_send_cb);
  59. }
  60.  
  61. int main(void)
  62. {
  63. struct sockaddr_in addr;
  64. uv_udp_send_t req;
  65. uv_buf_t buf;
  66. int r;
  67.  
  68. loop = uv_default_loop();
  69. r = uv_ip4_addr("0.0.0.0", , &addr);
  70. r = uv_udp_init(loop, &server);
  71. r = uv_udp_bind(&server, (const struct sockaddr*) &addr, );
  72. r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb);
  73.  
  74. uv_run(loop, UV_RUN_DEFAULT);
  75.  
  76. return ;
  77. }

基于libuv库的UDP收/发广播消息代码实现的更多相关文章

  1. Linux下UDP收/发广播消息简单实现

    发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...

  2. UDP收/发广播包原理及步骤

    原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...

  3. UDP 收/发 广播包

    网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口.因为同一主机上的程序使用网络是通过端口号来区分的. UDP Socket的使用过程: 1. 初 ...

  4. 一个基于TCP/IP的小项目,实现广播消息的功能。(超详细版)

    1.结合现状 功能分析 该功能基于上个项目的改进,主要是通过对服务器端代码的修改,以及对客户端作少许修改,实现开启多客户端时,一个客户端发送消息,达到对所有客户端广播的效果.可参考网吧里的点歌系统,比 ...

  5. android Broadcast广播消息代码实现

    我用的是Fragment , 发送写在一个类中,接收写在另外一个类的内部类中.代码动态实现注册. 代码: myReceiver = new zcd.netanything.MyCar.myReceiv ...

  6. 一次处理CentOS服务器被攻击往外发广播包

    情况是这样:我们在某地托管的一台linux服务器,突然接到机房电话说是我们机器将整个IDC网络搞瘫了.外部机器没法访问IDC.  挂掉电话后:我就开始考虑,托管机器的机房是有硬防的,我本身一台机器怎么 ...

  7. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

  8. boost库之udp广播实例

    //UdpLinkServer.h //udp服务 #pragma once #include <boost/asio/ip/tcp.hpp> #include <boost/asi ...

  9. UDP 单播、广播和多播

    阅读目录(Content) 一.UDP广播 二.UDP多播 1.多播(组播)的概念 2.广域网的多播 三.UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就 ...

随机推荐

  1. C#通过OLEDB导出大数据到Excel

    C#导出数据到Excel,基本有两种方法,一种方法是通过Microsoft.Office.Interop.Excel.Application,一行一列的写入Excel中:另一种方法是通过OLEDB,利 ...

  2. 模板 树链剖分BFS版本

    //点和线段树都从1开始 //边使用vector vector<int> G[maxn]; ],num[maxn],iii[maxn],b[maxn],a[maxn],top[maxn], ...

  3. 关于android的Activity的四种启动模式

    最近做项目遇到一个问题,当触摸屏幕的时候通过intent启动activity,发现会启动多次,而后查阅资料,发现,原来是activity的模式设置问题. Activity的启动模式可以通过Androi ...

  4. 【翻译】Ext JS最新技巧——2014-5-12

    原文:mkt_tok=3RkMMJWWfF9wsRoluazJZKXonjHpfsX77OQlXK%2B%2FlMI%2F0ER3fOvrPUfGjI4AT8NjI%2BSLDwEYGJlv6SgFS ...

  5. 谈使用Eclipse与DDMS调试Android程序的方法

    在Eclipse开发工具中调试程序的方法很多,但是使用Eclipse调试Android程序时需要注意一些细节上的问题.许多刚接触 Android的开发者,在调试Android程序时总是不能迅速地找到程 ...

  6. Libgdx Box2D真实---这缓释微丸(三:规则经常使用body和精灵联合)

    介绍规则body怎样和图片结合.上一篇文章我介绍了box2D的基本知识,假设你用心的话.你会搜索网上相关简单demo吧.那些我就不写了.那么假设我用图片表示我的那个body.而不是简单线条.那该怎么办 ...

  7. MVC - 学习总目录

    MVC - 基础 MVC - HtmlHelper类 MVC - 路由 MVC - 身份验证 MVC - 模型验证 MVC - Ajax MVC - 布局

  8. WinServer 之 发布WebService后调用出现" The test form is only available for requests from the local machine. "

    当您尝试从远程计算机访问 Web 服务时,不会显示“调用”按钮.并且,您会收到以下错误信息: The test form is only available for requests from the ...

  9. [转]javascript指定事件处理程序包括三种方式:

    javascript指定事件处理程序包括三种方式: (1):DOM0级事件处理程序 如: 代码如下: var btn=document.getElementById("mybtn" ...

  10. iOS之自定义UITabBar替换系统默认的(添加“+”号按钮)

    自定义UITabBar替换系统默认的,目的是为了在UITabBar中间位置添加一个“+号按钮”,下面我们来聊聊具体的实现. 1.自定义WBTabBar,让其继承自UITabBar,代码如下: // / ...