关键词不能为空

当前您在: 主页 > 英语 >

libuv之基础

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-08 11:53
tags:

-

2021年2月8日发(作者:海珍品)


libuv


之基础








TCP


客户端连接步骤:



.连接方法


Uv_loop_t *loop =


uv_default_loop(); uv_tcp_t *client =


malloc…;uv_connect_t* connect_req = malloc…;


uv_tcp_init(loop, client) uv_tcp_connect(connect_req,



client, addr,



connect_cb); uv_run(loop); getchar(); / /


服务


端不需要这个,


现在还不明白为 什么



②.回调函数


static void


connect_cb(uv_connect_t*req, int status){










int r;










uv_buf_t buf = uv_buf_init(


这 必须是动态分


配内存,在


uv_write

函数内部会对这个指针赋值。











uv_write_t *reqw = (uv_write_t*)malloc(sizeof *reqw);












write_cb


中,释放分配的内存。











r =


uv_write(reqw, (uv_stream_t*)(req->handle),&buf,


1, write_cb);} static void write_cb(uv_write_t*req, int


status){}static void read_cb(uv_stream_t*tcp, ssize_t nread,


uv_buf_t buf){}uv_connect_tis a subclass of uv_req_t











服务端连接步骤①.连接方法











loop =


uv_default_loop();











structsockaddr_in addr =


uv_ip4_addr(










int r;











server = (uv_handle_t*)&tcpServer;










r =


uv_tcp_init(loop, &tcpServer);










if


(r){




















std::cout <<


error




















return;










}











r =


uv_tcp_bind(&tcpServer, addr);










if


(r){




















std::cout <<


std::endl;




















return;










}











r =uv_listen((uv_stream_t*)&tcpServer, 10,


on_connection);










if


(r){




















std::cout <<


<< std::endl;




















return;










}











uv_run(loop); ②.回调函数


static


voidon_connection(uv_stream_t* server, int


status){










uv_stream_t* stream;










int r;


用这


种方式来初始化一个新连接











stream =


(uv_stream_t*)malloc(sizeof(uv_tcp_t));










ASSERT(stream != NULL);










r =


uv_tcp_init(loop,(uv_tcp_t*)stream);










stream->data = server;










r = uv_accept(server,


stream);} *uv_stream_t is a subclass of uv_handle_t * *


uv_stream is an abstract class. * * uv_stream_t is the


parent class of uv_tcp_t,uv_pipe_t, uv_tty_t, and * soon


uv_file_t.


在客户端的连接中

Uv_tcp_connect(connect_req…);connec


t_ req


是一个


uv_connect_t*

参数,相应的


connect_cb


的第一个参数为


uv_connect_t*,(uv_connect_t



uv_req_t


的子类


)


服务端的


连接中


uv_listen((uv_str eam_t*)&tcpServer,10,


on_connection );


相应的


on_connect


的第 一个参数为


uv_stream_t*


看来

< br>


的思想和


ACE


非常像,把请求


对象和连接对象分别封装成不同概念的东西。





open


创建套接字然后使用


uv_tcp_open


,再


uv_tcp_connect


时,


函数内部不会再 创建套接字,仅此而已。



_read_stopUv_rea d_stop((uv_stream_t*)&tcp_ha


ndle);U v_close((uv_handle_t*)tcp_handle); UDP


客户端:











uv_udp_send_t req;










r =


uv_udp_init(uv_default_loop(),&clie nt);










ASSERT(r == 0);











buf = uv_buf_init(










r = uv_udp_send(&req, &client,&buf, 1, addr,


cl_send_cb);











voidcl_send_cb(uv_udp_send_t*


req, intstatus)










{}UDP


服务端:











r =


uv_udp_init(uv_default_l oop(),&server);










ASSERT(r == 0);











r = uv_udp_bind(&server,


addr, 0);










ASSERT(r == 0);











r =


uv_udp_recv_start(&server,alloc_cb, sv_recv_cb);










ASSERT(r == 0);







static void sv_recv_cb(uv_udp_t*

-


-


-


-


-


-


-


-



本文更新与2021-02-08 11:53,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/614347.html

libuv之基础的相关文章