非QT服务器和QT客户端-使用节俭连接
Non-QT server and QT client - connection using thrift
要求
客户端-服务器应用
通信将由节俭完成
服务器将在后台运行或通过没有GUI 的终端调用
客户将是基于Qt的
当前场景和问题
目前,服务器使用具有一定数量线程的TNonBlockingServer
(使用线程管理器(
客户端连接到服务器并执行此任务。
但是,有一个特定的要求,如果我的服务器没有运行,而客户端试图连接到它,那么应该在客户端的屏幕上显示一个消息框。
目前程序只是给出了一个分段错误,所以我尝试使用try-catch,但没有成功。在搜索时,我注意到Qt不支持Exceptions。
经过进一步的搜索,我发现了这个,但它似乎是使用QT的(我仍然不知道我的问题是否可以通过这个解决(
服务器代码:
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
shared_ptr<workerHandlerHandler> handler(new workerHandlerHandler());
shared_ptr<TProcessor> processor(new workerHandlerProcessor(handler));
shared_ptr<ThreadManager> threadManager = ThreadManager::newSimpleThreadManager(15);
shared_ptr<PosixThreadFactory> threadFactory = shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
threadManager->threadFactory(threadFactory);
threadManager->start();
TNonblockingServer server(processor, protocolFactory, port,threadManager);
server.serve();
客户端使用连接
boost::shared_ptr<TSocket> socket(new TSocket(serverip.toUtf8().data(), 59999));
boost::shared_ptr<TTransport> transport(new TFramedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
workerHandlerClient client(protocol);
transport->open();
int pingValue = client.ping();
transport->close();
为什么不使用这样的东西:
QTcpSocket *socket = new QTcpSocket();
socket->connectToHost(serverip, serverport);
if(!socket->waitForConnected(time-in-msecs))
QMessageBox::critical(some-ui-window-as-parent, "Error Title", "Error connecting Text");
如果客户端是基于Qt的,则可以使用QTcpSocket
连接服务器:
QTcpSocket clientSocket;
通过将客户端套接字的error
信号连接到插槽,可以在出现错误时显示相应的消息框。如果服务器没有运行,客户端尝试连接,则会调用插槽,并显示包含错误的消息框:
connect( &clientSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(tcpError(QAbstractSocket::SocketError)) );
clientSocket.connectToHost(ipAddress, portNo );
插槽为:
void MyClass::tcpError(QAbstractSocket::SocketError error)
{
QMessageBox::warning( this, tr("Error"),tr("TCP error: %1").arg( clientSocket.errorString() ) );
clientSocket.disconnectFromHost();
}
我不知道你的真正意思。Qt只支持尝试接球。现在,我正在开发一个与您的程序类似的程序。我也使用No QT服务器和QT客户端,但在我的代码中,我使用如下结构:
try
{
}
catch(TException e)
{
QMessageBox::information(this, "Warn", "Thrift server has shut down");
}
并且它工作得很好
相关文章:
- QT 连接没有要调用的匹配功能
- QT - 连接 Qml 按钮 单击到 Cpp 构造函数
- 一个 ui 成员的 Qt 连接和同一连接中的两个信号
- Qt 连接无法识别 lambda 表达式
- Qt/C++ 连接到经典蓝牙设备
- QT连接:使用lambda表达式重置通过了int变量(怪异)
- QT连接到按钮不起作用
- Qt连接到插槽辅助接口
- Qt-连接触发动作中的信号/插槽
- QT连接在构造函数中不连接
- 窗口处于全屏模式时,QT连接不起作用
- 类之间的 QT 连接
- 无法为 QT 连接函数提供参数
- 如何将基本的qt连接转换为while循环
- Qt连接不同窗口中的类
- 如何使用Qt连接函数调用Shell Execute
- Qt 连接无法连接到插槽
- Qt:连接信号和插槽
- 使用 Qt 连接到本地数据库
- Qt连接不起作用