我使用QTcpSocket来在两个应用之间进行通信,一个是C++程序,另一个是用PHP编写的网页。
目标是使用socket从我的网页向C++程序发送数据。
我不知道如何在特定端口(例如12345)上打开连接并侦听是否有数据传输。
到目前为止,我已经编写了以下代码:
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Mysocket = new QSocket(this);
Mysocket->Initialization();
}
MainWindow::~MainWindow()
{
delete ui;
}
QSocket.cpp
#include "qsocket.h"
#define SOCKET_PORT 12345
QSocket::QSocket(QObject *parent) :
QObject(parent)
{
}
void QSocket::Initialization()
{
//connected
socket = new QTcpSocket(this);
socket->connectToHost("localhost",SOCKET_PORT);
connect(socket,SIGNAL(connected()),this,SLOT(connected()));
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
connect(socket,SIGNAL(bytesWritten(qint64)),this,SLOT(bytesWritten(qint64)));
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
if(!socket->waitForConnected(1000))
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(0,"Error","Error in Socket Connection",
QMessageBox::Yes|QMessageBox::No);
socket->close();
}
socket80->close();
}
void QSocket::connected()
{
QMessageBox::StandardButton reply;
int PortNumber = socket->localPort();
reply = QMessageBox::question(0,"Connected","Socket Connection is Established",
QMessageBox::Yes|QMessageBox::No);
qDebug()<<"I'm Listening to Port: "<<PortNumber<<"on the local host \n";
}
void QSocket::disconnected()
{
qDebug()<<"Disconnected .... \n";
socket->close();
}
void QSocket::bytesWritten(qint64 bytes)
{
qDebug()<<"We wrote "<<bytes<<" \n";
}
void QSocket::readyRead()
{
qDebug()<<"Reading .... \n";
qDebug()<<socket->bytesAvailable();
qDebug()<<socket->readAll();
}
当我运行这段代码时,它没有打开任何连接,并且报错并进入了这个if语句..
if(!socket->waitForConnected(1000))
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(0,"Error","Error in Socket Connection",
QMessageBox::Yes|QMessageBox::No);
socket->close();
}
如果我将端口号更改为80,则一切正常,所有功能都能正常工作。通过阅读SO上的一些帖子,我意识到一个解决方法是使用QTcpServer,但我没有任何具体的经验。问题出在哪里?!
P.S.
我的平台规格。
Ubuntu 13.10
Qt 5.2.1
QTcpServer
及其QTcpServer::listen()
函数。一旦有新的连接,就会发出newConnection
信号,你需要处理它以创建一个新的套接字进行数据传输。 - vahancho