基于libuv库的UDP收/发广播消息代码实现
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收/发广播消息代码实现的更多相关文章
- Linux下UDP收/发广播消息简单实现
发送广播消息 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/typ ...
- UDP收/发广播包原理及步骤
原文链接地址:http://www.2cto.com/net/201311/254834.html UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要 ...
- UDP 收/发 广播包
网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口.因为同一主机上的程序使用网络是通过端口号来区分的. UDP Socket的使用过程: 1. 初 ...
- 一个基于TCP/IP的小项目,实现广播消息的功能。(超详细版)
1.结合现状 功能分析 该功能基于上个项目的改进,主要是通过对服务器端代码的修改,以及对客户端作少许修改,实现开启多客户端时,一个客户端发送消息,达到对所有客户端广播的效果.可参考网吧里的点歌系统,比 ...
- android Broadcast广播消息代码实现
我用的是Fragment , 发送写在一个类中,接收写在另外一个类的内部类中.代码动态实现注册. 代码: myReceiver = new zcd.netanything.MyCar.myReceiv ...
- 一次处理CentOS服务器被攻击往外发广播包
情况是这样:我们在某地托管的一台linux服务器,突然接到机房电话说是我们机器将整个IDC网络搞瘫了.外部机器没法访问IDC. 挂掉电话后:我就开始考虑,托管机器的机房是有硬防的,我本身一台机器怎么 ...
- TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
- boost库之udp广播实例
//UdpLinkServer.h //udp服务 #pragma once #include <boost/asio/ip/tcp.hpp> #include <boost/asi ...
- UDP 单播、广播和多播
阅读目录(Content) 一.UDP广播 二.UDP多播 1.多播(组播)的概念 2.广域网的多播 三.UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就 ...
随机推荐
- systemd service
Man page systemd.unit SYSTEMD.UNIT(5) systemd.unit SYSTEMD.UNIT(5) NAME systemd.unit - Unit configur ...
- Nuget控制台 - 给你的快速添加缺少的包
利用命令行安装包
- jquery美化滚动条插件jscrollpane应用(转)
原文地址:http://www.jqcool.net/jquery-jscrollpane.html jScrollPane是一个设计非常灵活的跨浏览器的jQuery ,它将浏览器的默认滚动条或是元素 ...
- [MODx] 8. Snippet get data, chunk display
Simple Example: Lets process this chunk and output its value. We have this Chunk, called "Welco ...
- iOS开发——基本常识篇&各种控件默认高度
各种控件默认高度 1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置 ...
- 【C/C++多线程编程之六】pthread相互排斥量
多线程编程之线程同步相互排斥量 Pthread是 POSIX threads 的简称,是POSIX的线程标准. Pthread线程同步指多个线程协调地,有序地同步使用共享 ...
- java_利用session校验图片认证码
RegisterServlet:检验server,client验证码是否一致 ImageServlet: 产生验证码 <!DOCTYPE html> <html> <he ...
- JS与OC交互--简单使用
直接上代码 .m文件 #import "ViewController.h" @interface ViewController () <UIWebViewDelegate&g ...
- 打造强大的BaseModel(1):让Model自我描述
前言 从事iOS开发已经两年了,从一无所知到现在能独立带领团队完成一系列APP的开发,网络上的大神给了我太多的帮助.他们无私地贡献自己的心得和经验,写出了一篇篇精美的文章.现在我也开始为大家贡献自己的 ...
- 面试体验:Google 篇(转)
http://www.cnblogs.com/cathsfz/archive/2012/08/08/google-interview-experience.html 尝试在自己的博客上搜索点东西,结果 ...