C libevent在接收数据包时激发send
我现在正在构建MQTT代理 因此,当我从客户端接收MQTT数据包时,该数据包也同时被发送。我无法找到原因。我在下面发布我的代码片段,请指出我哪里出错了C libevent在接收数据包时激发send,c,sockets,libevent,C,Sockets,Libevent,我现在正在构建MQTT代理 因此,当我从客户端接收MQTT数据包时,该数据包也同时被发送。我无法找到原因。我在下面发布我的代码片段,请指出我哪里出错了 static void onServEcho(struct bufferevent* bev, void* cbarg) { EvBufferEvent evbuf(bev); struct evbuffer *input = bufferevent_get_input(bev); struct evbuffer *out
static void onServEcho(struct bufferevent* bev, void* cbarg) {
EvBufferEvent evbuf(bev);
struct evbuffer *input = bufferevent_get_input(bev);
struct evbuffer *output = bufferevent_get_output(bev);
size_t len = evbuffer_get_length(input);
evutil_socket_t accept_fd = bufferevent_getfd(bev);
// Copy all the data from the input buffer to the output buffer.
char *data;
//data =(char *) malloc(len);
data = new char[len];
// cout<<"dasd"<<data<<endl;
evbuffer_copyout(input, data, len);
// evbuf.copy_data(input, data, len);
char converted[len];
int i;
for (i = 0; i < len; i++) {
sprintf(&converted[i * 2], "%02X", data[i]);
// cout<<"data is"<< data[i]<<endl;
*/
}
// std::stringstream stream;
// char packet[len];
//cout << "the hex data is" << converted << "with size" << len << endl;
// for(i=0;i<(2*len;i=i+2) {
// string connect_char;
// connect_char.insert(0,"0x");
/// connect_char.append(converted,i,2);
//char *buffer=static_cast<char*>(connect_char);
/// unsigned int buffer=strtoul(connect_char.c_str(), NULL, 16);
// char W = static_cast<char>(buffer);
// cout<<"the characterr is "<<W<<endl;
// }
//char *packet=convert(converted,20);
//cout<<"the packet converted is "<<packet<<endl;
string connect_comd;
//connect_comd="0x";
connect_comd.insert(0, "0x");
connect_comd.append(converted, 0, 2);
// strcpy(connect_comd,converted[0]);
// strcpy(connect_comd,converted[1]);
//unsigned int buf = strtoul(connect_comd.c_str(), NULL, 16);
//int buf=0x10;
int message_type = (ToBits(data[0]).to_ulong());
// cout<<"the message type received now is"<<GET_MESSAGE(data[0])<<endl;
//cout << "the connectcommand is" << buf << endl;
cout << "the message flag received now is" << ToBits(data[0]) << endl;
if (GET_MESSAGE(message_type) == CONNECT) {
cout << "connect packet received from mqtt client" << endl;
ConnectPack_Parser(data, len, accept_fd);
} else if (GET_MESSAGE(message_type) == SUBSCRIBE) {
cout << "subscribe packet received from mqtt client" << endl;
SubscribePack_Parser(data, len, accept_fd);
}
// }
// hexify()
//evbuffer_add_buffer(output, input);
evbuffer_add_buffer(output, input);
//evbuffer_remove_buffer(input,output,len);
free(data);
}
static void onServEcho(struct bufferevent*bev,void*cbarg){
EVBUFFEREVBUF(bev);
struct evbuffer*input=bufferevent\u get\u input(bev);
struct evbuffer*output=bufferevent\u get\u output(bev);
size\u t len=evbuffer\u get\u length(输入);
evutil_套接字_t accept_fd=bufferevent_getfd(bev);
//将所有数据从输入缓冲区复制到输出缓冲区。
字符*数据;
//数据=(字符*)malloc(len);
数据=新字符[len];
//cout代码目前正在运行。我正在为那些可能需要它的人发布它。如果您只需要读取操作,请不要使用“evbuffer\u add\u buffer”(输出,输入)'代码,因为这会立即将其写入套接字,或者换句话说,会将数据发送到连接的客户端,以便同时发送连接数据包。我已尝试修复您的代码格式,但即使如此,它还是一团糟。这个问题与主题无关,发布代码并只是说“为什么这不起作用”这是一个不可接受的问题我是第一次使用libevent库,我跟踪了wireshark,发现每当服务器上收到一个数据包时,该数据包都是通过“evbuffer\u add\u buffer(输出,输入)”行发送的;'我不明白为什么。在libevent的文档中,它说明必须包含这一行以实现高效操作。对于代码格式,我真的不知道如何格式化它,但我不知道如何格式化它,所以使用ctrl+K以避免标记错误为C
,但一半代码为C++
…ar你确定你正在编译这个吗?编译器有什么错误?抱歉我给了错误的标签,代码是C++的。