基于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协议进行信息的传输之前不需要建议连接.换句话说就 ...
随机推荐
- uva 11246 - K-Multiple Free set(数论)
题目链接:uva 11246 - K-Multiple Free set 题目大意:给定n,k.求一个元素不大于n的子集,要求该子集的元素尽量多,而且不含两个数满足a∗k=b. 解题思路:容斥原理.f ...
- 【转】数据库中的join
转自:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有 ...
- ThinkPHP CURD方法盘点:field方法
ThinkPHP的CURD操作中有很多非常实用的方法,从这篇开始,我们会为大家一一介绍. 首先为大家介绍下field方法的用法.field属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段 ...
- 用普通IO驱动LCD的控制方法-松瀚汇编源程序
/*************************************** 本例程为IO直接驱动LCD的方法 以下是松瀚MCU汇编源程序 **************************** ...
- PCL入门—点云操作 定义变量 显示点云 存储
// 定义相关变量 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr (new pcl::PointCloud<pcl::PointXYZ& ...
- Oracle 11g系统自己主动收集统计信息的一些知识
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10 ...
- 华为的JAVA面试题及答案(部分)
华为的JAVA面试题 (后记:没有想到华为的面试题就是非同一般,非常多题不是一眼就行看得出来,至少对我这种鸟来说是这样.对我个人来说,看看这种题,可能比看<Think In Java>都还 ...
- [React Native] Complete the Notes view
In this final React Native lesson of the series we will finalize the Notes view component and squash ...
- MongoDB入门简单介绍
有关于MongoDB的资料如今较少,且大多为英文站点,以上内容大多由笔者翻译自官网,请翻译或理解错误之处请指证.之后笔者会继续关注MongoDB,并翻译“Developer Zone”和“Admin ...
- Linux SO_KEEPALIVE属性,心跳
对于面向连接的TCP socket,在实际应用中通常都要检測对端是否处于连接中,连接port分两种情况: 1.连接正常关闭,调用close() shutdown()连接优雅关闭,send与recv立刻 ...