基于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协议进行信息的传输之前不需要建议连接.换句话说就 ...
随机推荐
- Select-Object用法
展开 modules 属性的详细信息 get-process |? {$_.processname -eq "cmd"}|select -ExpandProperty module ...
- 用csc命令行手动编译cs文件
一般初学c#时,用记事本写代码,然后用命令行执行csc命令行可以编译cs文件.方法有两种 1:配置环境,一劳永逸 一般来说在C:\Windows\Microsoft.NET\Framework\v4. ...
- 跟我学solr---吐槽一下,我的文章被抄袭啦
今天闲来无事,就在在百度上搜了下面"跟我学solr",看看这几周来自己的努力成果怎么样,不搜还好,搜了就图学了.被原封不动地抄袭了!并且抄袭的文章还在百度排名第一,我自己的却被排到 ...
- php中用户自定义排序
php中数组用户自定义排序函数有usort和uasort,前者键值重新排列,后者保持原数组的键值. 举例usrot: usort($filterArr, 'sortArr'); function so ...
- N个数字中随机取m个数子,不重复
<script> function rand_nums(min,max,count){ var arr = []; for(var i=min;i<max;i++){ arr.pus ...
- java_jdbc_反射技术将查询结果封装为对象
package cn.itcast.Reflect; import java.lang.reflect.InvocationTargetException; import java.lang.refl ...
- linux定时执行文件
#!/bin/bashcurl "http://172.16.201.24:8080/?app_act=timer/automic_integral" -b -q -o /dev ...
- sqlite数据下载链接地址
链接: http://pan.baidu.com/s/1pJN1abT 密码: yjg5
- Android_Notification
xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Forwarding a Range of Ports in VirtualBox
STAN SCHWERTLY MAY 9, 2012 ARTICLES 3 COMMENTS Doesn't allow forwarding a range of ports through the ...