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. 利用UIBezierPath实现一个带圆角的视图

    - (void)drawRect:(CGRect)rect { // draw a box with rounded corners to fill the view - UIBezierPath * ...

  2. Sql Server问题集锦

    Sql数据库默认实例和命名实例的区别: 1.服务中服务名称的区别: 默认实例:MSSQLSERVER; 命名实例:实列名为:benet,在服务中的名称是:MSSQL$BENET;   注:如果你有多个 ...

  3. android有点纠结的小问题

    1.点击一个listview的item,以popupwindow的形式展示一个菜单.popupwindow以动画的形式展现,可一直没有预期的效果 解决方案: popupWindow.setBackgr ...

  4. Android仿腾讯应用宝 应用市场,下载界面, 有了进展button

    近期应用市场做,需要使用.下载与进度显示button,因此,要寻找其他大神做,直接用于改善.和很多无用的切出.在改进共享后. 再一次改变.当下载进度时,有进步.进度显示自己主动运行文本.并设置背景为灰 ...

  5. iOS开发——数据持久化Swift篇&iCloud云存储

    iCloud云存储 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super. ...

  6. form表单普通提交预览显示,读取显示tmp文件

    <html> <head> <meta http-equiv="content-type" content="text/html; char ...

  7. Android 快速开发框架网络篇-Android-Async-Http

    一.基本用法 AsyncHttpClient client = new AsyncHttpClient(); client.get("http://www.google.com", ...

  8. c++与c不太相同的一些地方2

    1.一般全局变量放到cpp 文件里面,而不是.h 里面.要不然容易乱套,这个乱几次就好了,先记住这样一种编码规范. 以为大家都引入就比较麻烦,但是实现起来就只有cpp里面才有.毕竟.h是要被包含的文件 ...

  9. Python 文件操作模块 shutil 详解

    1.导入模块 shutil import shutil 2.shutil方法 2.1 shutil.copy(src,dst) //将 src 复制到 dst 保留文件权限    例:将Alan复制到 ...

  10. nginx笔记---http配置

    1.三个逻辑区段 http:该区段嵌入配置文件的根部,在这个区段中允许定义指令和嵌入http相关模块.他包含了一个或多个server区段,他也能够使全局配置生效. server:这个区段建立了一个站点 ...