c/c++ libuv_Tcp服务器搭建

事件循环loop

这里写图片描述


loop循环对象

这里写图片描述

1: uv_loop_t: 事件循环对象;
2: uv_default_loop 创建默认的事件loop;
3: uv_run: 开启事件循环等待事件的发生;
4: 如果没有任何事件等待,就会结束事件循环;


这里写图片描述


TCP监听请求

1: uv_tcp_t: TCP 的句柄(handle);
2: r = uv_tcp_init(loop, handle);
// 初始化这个tcp的句柄, 将客户端句柄加入loop,让loop管理它;
r返回的是结果, 0表示成功;
3: 监听socket绑定IP地址和端口:
struct sockaddr_in addr;
uv_ip4_addr(“0.0.0.0”, port, &addr); // ip地址, 端口
r = uv_tcp_bind(&tcpServer, (const struct sockaddr*) &addr, 0);
4: 开启监听:
r = uv_listen((uv_stream_t*)&tcpServer, SOMAXCONN, on_connection);
5: 接入客户端:
1>uv_tcp_t: 创建一个客户端的handle;
2>将客户端句柄加入loop,让loop管理它;
r = uv_tcp_init(loop, (uv_tcp_t*)client);
3>r = uv_accept(server, stream); // 把client与客户端对接;
4>r = uv_read_start(stream, uv_buf_alloc, after_read);
6: uv_err_name(status): 返回当前status的错误描述

这里写图片描述

这里写图片描述

这里写图片描述


接收数据已关闭

1: static void after_read(uv_stream_t* handle, ssize_t nread,const uv_buf_t* buf) {
if (nread < 0) {
uv_shutdown_t* sreq;
/* Error or EOF */
// assert(nread == UV_EOF);
sreq = my_malloc(sizeof(uv_shutdown_t));
uv_shutdown(sreq, handle, after_shutdown);
return;
}
// end

// 读取到数据
// end
}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


发送数据

1:uv_write

这里写图片描述

这里写图片描述

这里写图片描述


chient
Server

猜你喜欢

转载自blog.csdn.net/qq_36482772/article/details/79338659