目前,我使用libevent
发送和接收消息。我目前遇到的问题是,我不接收服务器上的所有信息;并且只接收我发送的第一条消息。
客户机代码:
for (int i=0; i < 10 ; i++)
{
bufferevent_write(bev, data, strlen(data) + 1);
}
服务器代码:
static void read_cb(struct bufferevent* bev, void* arg)
{
char buf[2048] = {};
bufferevent_read(bev, buf, sizeof(buf));
//do something
}
我已经这样修改了客户端:
for (int i=0; i < 10 ; i++)
{
bufferevent_write(bev, data, strlen(data) + 1);
sleep(1)
}
当我添加一个sleep(1)
时,我可以接收所有的消息。
我想避免使用sleep(1)
。需要在代码中添加/更改的内容,以便可以接收所有消息,并且不使用sleep
。
这种情况似乎有点像spacket拼接问题,您可以试试这个
static void read_cb(struct bufferevent* bev, void* arg)
{
char bufs[2048];
struct evbuffer *input = bufferevent_get_input(bev);
size_t lens = evbuffer_get_length(input);
char * rline = bufs;
while( lens > 0){
char buf [1024]
memcpy(buf, rline, strlen(data));
rline = rline + strlen(data);
lens = lens -strlen(data);
// use buf do something else
}
}