Gtk-WARNING **:gtk_disable_setlocale() must be called befor
我搜索了一下产生原因,是由于QT窗口系统与Opencv中的imshow产生的窗体冲突。imshow是需求,不能移除,那就只有考虑不使用QT窗口系统。其实我也不想和QT窗口系统扯上关系,主要是涉及到的QUdpSocket通信,详情可以查看《QUdpSocket通信简易实例》。这个其中的信号(signal)必须搭配值槽函数使用,而槽函数就是QT窗口系统中的,要定义槽函数,必须继承QObject,所以貌似要使用QUdpSocket就必须要和QT窗口系统扯上关系。所以我使用了替代方案:libhv,
Like libevent, libev, and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols.
#include "UdpServer.h"
using namespace hv;
int main() {
int port = atoi("8179");
UdpServer srv;
int bindfd = srv.createsocket(port);
if (bindfd < 0) {
return -20;
}
printf("server bind on port %d, bindfd=%d ...\n", port, bindfd);
srv.onMessage = [](const SocketChannelPtr& channel, Buffer* buf) {
printf("< %.*s\n", (int)buf->size(), (char*)buf->data());
std::string result = stitchController((char*)buf->data());
//不太明白这段代码有什么用,但是执行完这段代码就会触发下面的onWriteComplete 回调函数
channel->write(result.data());
};
srv.onWriteComplete = [](const SocketChannelPtr& channel, Buffer* buf) {
printf("> %.*s\n", (int)buf->size(), (char*)buf->data());
//channel->send((char*)buf->data());
};
srv.start();
while (1) sleep(1);
return 0;
}
上述代码就能实现对于Udp消息的监听,一收到消息,就会触发onMessage 回调函数,可以在里面填写自己的业务代码。最开始我以为这段代码回复Udp消息,最后,我发现自己是想多了。想要知道如何回复Udp消息,可以转到我上一篇博客的Sender