Я использовал QTcpSocket и QTcpServer класс qt для установления двусторонней связи. Я могу отправлять данные с клиента на сервер. Но я не получаю ответ от сервера. I.e клиент.cpp никогда не запускает readyRead(). Я проверил использование Wireshark, что мои данные с сервера доступны в указанном порту.не удалось установить двустороннюю связь с использованием qt
Я отправляю мой 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 и т.д. – Amartel
Почему у вас есть навсегда петлю там? – thuga
BTW, цикл без сна сделает использование процессора 100%, вы должны переосмыслить свою архитектуру (например, переместите все в поток и используйте 'QThread :: sleep'). – Amartel