【发布时间】:2014-01-22 19:21:42
【问题描述】:
我已经使用qt的QTcpSocket和QTcpServer类建立了两种方式的通信。我能够将数据从客户端发送到服务器。但是我没有从服务器得到响应,即我的 client.cpp 永远不会触发 readyRead() 信号。我已经使用 Wireshark 检查了我来自服务器的数据是否在指定端口中可用。
我正在发布我的 client.cpp 代码(请帮助):
Client::Client(QObject* parent): QObject(parent)
{
socket = new QTcpSocket(this);
connect(socket, SIGNAL(connected()),
this, SLOT(startTransfer()));
connect(socket, SIGNAL(readyRead()),this, SLOT(startRead()));
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(socketError(QAbstractSocket::SocketError)) );
}
Client::~Client()
{
socket->close();
}
void Client::start(QString address, quint16 port)
{
addr.setAddress(address);
socket->connectToHost(addr,port,QTcpSocket::ReadWrite);
}
void Client::startTransfer()
{
printf("Connection established.\n");
char buffer[1024];
forever
{
printf(">> ");
gets(buffer);
int len = strlen(buffer);
buffer[len] = '\n';
buffer[len+1] = '\0';
socket->write(buffer);
socket->flush();
}
}
void Client::startRead()
{
cout<<"inside startRead()<<endl";
while(socket->canReadLine())
{
QByteArray ba = socket->readLine();
if(strcmp(ba.constData(), "!exit\n") == 0)
{
socket->disconnectFromHost();
break;
}
printf(">> %s", ba.constData());
}
}
void Client::socketError(QAbstractSocket::SocketError )
{
qDebug()<<"error" ;
}
【问题讨论】:
-
请添加服务器代码:创建QTcpServer,使用QTcpSocket等
-
为什么你有一个永远的循环?
-
顺便说一句,没有睡眠的循环将使 CPU 使用率达到 100%,您应该重新考虑您的架构(例如将所有内容移动到线程并使用
QThread::sleep)。 -
@Amartel 不会有 100% 的 CPU 使用率,因为那里的永远循环内有来自 stdin 的读取。 =)
-
@JustAnotherCurious 我的错误 - 不专心地阅读代码。