uv_send(发送端):

 #include "uv.h"
#include "task.h" #include <stdio.h>
#include <stdlib.h>
#include <string.h> static uv_udp_t client; static uv_loop_t *loop; static void alloc_cb(uv_handle_t* handle,
size_t suggested_size,
uv_buf_t* buf)
{
static char slab[];
buf->base = slab;
buf->len = sizeof(slab);
} static void close_cb(uv_handle_t* handle)
{
uv_is_closing(handle);
} static void cl_recv_cb(uv_udp_t* handle,
ssize_t nread,
const uv_buf_t* buf,
const struct sockaddr* addr,
unsigned flags)
{
if (nread < )
{ } if (nread == )
{
return;
} printf("I receive the message from server:%s\n", buf->base); uv_close((uv_handle_t*) handle, close_cb);
} static void cl_send_cb(uv_udp_send_t* req, int status)
{
uv_udp_recv_start(req->handle, alloc_cb, cl_recv_cb);
} int main(void)
{
struct sockaddr_in addr;
uv_udp_send_t req;
uv_buf_t buf;
int r; loop = uv_default_loop(); r = uv_ip4_addr("0.0.0.0", , &addr);
r = uv_udp_init(loop, &client);
r = uv_udp_bind(&client, (const struct sockaddr*) &addr, );
r = uv_udp_set_broadcast(&client, );
uv_ip4_addr("255.255.255.255", , &addr);
buf = uv_buf_init("PING", );
printf("I am sending message to server:%s.\n", buf.base);
uv_udp_send(&req,
&client,
&buf,
,
(const struct sockaddr*) &addr,
cl_send_cb); uv_run(loop, UV_RUN_DEFAULT); return ;
}

uv_recv(接收端):

 #include "uv.h"
#include "task.h" #include <stdio.h>
#include <stdlib.h>
#include <string.h> static uv_loop_t *loop;
static uv_udp_t server; static void alloc_cb(uv_handle_t* handle,
size_t suggested_size,
uv_buf_t* buf)
{
static char slab[]; buf->base = slab;
buf->len = sizeof(slab);
} static void close_cb(uv_handle_t* handle)
{
uv_is_closing(handle);
} static void sv_send_cb(uv_udp_send_t* req, int status)
{
uv_close((uv_handle_t*) req->handle, close_cb);
free(req);
} static void sv_recv_cb(uv_udp_t* handle,
ssize_t nread,
const uv_buf_t* rcvbuf,
const struct sockaddr* addr,
unsigned flags)
{
uv_udp_send_t* req;
uv_buf_t sndbuf; if (nread < )
{ } if (nread == )
{
return;
} printf("I receive the message from client:%s.\n", rcvbuf->base); uv_udp_recv_stop(handle); req = malloc(sizeof *req); sndbuf = uv_buf_init("PONG", );
uv_udp_send(req, handle, &sndbuf, , addr, sv_send_cb);
} int main(void)
{
struct sockaddr_in addr;
uv_udp_send_t req;
uv_buf_t buf;
int r; loop = uv_default_loop();
r = uv_ip4_addr("0.0.0.0", , &addr);
r = uv_udp_init(loop, &server);
r = uv_udp_bind(&server, (const struct sockaddr*) &addr, );
r = uv_udp_recv_start(&server, alloc_cb, sv_recv_cb); uv_run(loop, UV_RUN_DEFAULT); return ;
}

基于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. Codeforces Round #322 (Div. 2) D. Three Logos 暴力

    D. Three Logos Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/problem ...

  2. iOS开发——UI篇&提示效果

    提示效果 关于iOS开发提示效果是一个很常见的技术,比如我们平时点击一个按钮,实现回馈,或者发送网络请求的时候! 技术点: 一:View UIAlertView UIActionSheet 二:控制器 ...

  3. [转]详述DHCP服务器的三种IP分配方式

    DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol),它的目的就是为了减轻TCP/IP网络的规划.管理和维护的负担,解决IP地址空间缺乏问题.这种网络 ...

  4. 带缓冲I/O和不带缓冲I/O的区别与联系

    转自:http://blog.csdn.net/lmh12506/article/details/6803847 首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用, ...

  5. 可扩展的listview--Expandablelistview

    layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...

  6. 简书APP

    找第三方的时候看到简书这个APP,上网搜了一下发现网页版非常的干净,开头的一篇文章就是"你没实力就别心存侥幸",看完也挺有有同感的.文章网址:http://www.jianshu. ...

  7. 我的开发框架(WinForm)2

    上篇文章简单的介绍了一下,我的一个开发框架.看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的. Data模块: 该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(C ...

  8. Failed to create java virtue machine(不能创建java虚拟机)

    今天开发模块时,遇到这个问题,本来是版本的问题,jdk1.6的版本有点低,与cxf框架不兼容,需要用到jdk1.7,结果安装了jdk1.7之后,客户方要求必须用jdk1.6,要统一,所以卸载jdk1. ...

  9. [转]Oracle ORA-01403: no data found Exception SYS_REFCURSOR

    本文转自:http://stackoverflow.com/questions/9104153/what-is-the-correct-way-to-deal-with-this-oracle-ora ...

  10. uiautomator日志文件转换为xml格式文件

    如果想把uiautomator的日志文件,转换成漂亮的xml文件,那么可以使用automator-log-converter.jar工具, 工具使用方法: 使用工具automator-log-conv ...