MQTTブローカーを構築中です。libeventはパケットを受信したときに送信します
だから、私はクライアントからMQTTパケットを受信しています。このパケットも同時に送信されています。なぜその理由がわかりません。私は以下のコードスニペットを投稿していますが、どこが間違っているのかを指摘してください。
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);
}
編集: 私は、コードへの修正のためのコードを投稿していないですが、私はそれはlibのイベントを使用してサーバ側から送信避ける方法についてのclulessています。 行 'evbuffer_add_buffer(出力、入力);'私はwiresharkからトレースすることができます受信パケットを自動的に送信します。これは、最適なパフォーマンスのためにlibeventのドキュメントに必要な行です。
私はあなたのコードの書式を修正しようとしましたが、それでもそれは混乱しています。この質問はトピックから外して、コードを掲示して、「なぜこの作品がどういうわけか」というのは受け入れ可能な質問ではありません。 – hardillb
最初はlibeventライブラリを使用していますが、wiresharkをトレースして、サーバ上でパケットが 'evbuffer_add_buffer'(出力、入力)という行で送信されました。なぜなら理解できません。libeventのドキュメントでは、この行は効率的な操作のためにincentされなければならないと述べています。 –
コードの書式設定については、実際にフォーマットする方法を理解できませんでしたが、 Kは投稿の誤りを避けるために –