我正在尝试使用libuv发送一些数据。客户端连接到服务器,服务器接受连接,然后客户端尝试使用uv_write进行写入(输出的是printf,所以我知道它已经走到了这一步)。结果是
uv_write2: Assertion `(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY) && "uv_write (unix) does not yet support other types of streams"' failed.这让我认为流一定不能被初始化。下面是代码,我哪里做错了?
void OnConnectToServer(uv_connect_t *client, int status)
{
if (status < 0)
{
return;
}
printf( "Client attempt write\n" );
write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
req->buf = uv_buf_init( (char*) malloc(1), 1 );
(req->buf.base)[0] = '0';
uv_write((uv_write_t*) req, client->handle, &req->buf, 1, OnWrite);
}
void SendData( uv_async_t*sd )
{
uv_tcp_t client;
uv_tcp_init(loop, &client);
uv_connect_t* connect = (uv_connect_t*)malloc(sizeof(uv_connect_t));
struct sockaddr_in dest;
uv_ip4_addr("192.168.20.3", PORT, &dest);
uv_tcp_connect(connect, &client, (const struct sockaddr*)&dest, OnConnectToServer);
}发布于 2018-07-11 21:03:25
uv_write_t是正确的结构,但是您不能使用req->buf,它是一个私有字段。您必须像这样声明一个新变量:
uv_write_t *req = (uv_write_t*) malloc(sizeof(uv_write_t));
uv_buf_t buf = uv_buf_init( (char*) malloc(1), 1 );
buf.base[0] = '0';
uv_write(req, client->handle, &buf, 1, OnWrite); https://stackoverflow.com/questions/50615833
复制相似问题