#c# #c #qt #sockets #networking
#c# #c #qt #сокеты #сеть
Вопрос:
Я пишу проект на C в Qt Creator, и у меня есть QTcpSocket
. Он подключается нормально, но bytesAvailable()
всегда zero
, даже когда я отправляю ему данные из другого проекта, который я написал на C #. Я проверил, что проект C # на самом деле отправляет данные с помощью другого проекта C #, и он отправляет данные правильно. Вот мой код:
#include <QTcpSocket>
#include <QDebug>
void main()
{
QTcpSocket *tcpSocket=new QTcpSocket();
tcpSocket->connectToHost("127.0.0.1",8080);
while(true)
{
if(tcpSocket->bytesAvailable()!=0)
{
qDebug()<<tcpSocket<-bytesAvailable();
}
}
tcpSocket->disconnectFromHost();
}
Спасибо. 😀
Комментарии:
1. Привет! Ваша последняя строка никогда не выполняется, я думаю, было бы проще, если бы вы использовали механизм сигнала / слота с сокетом. Смотрите примеры здесь: qt-project.org/doc/qt-4.8/network-blockingfortuneclient.html
Ответ №1:
Прежде всего, всем программам Qt нужен объект application для настройки многих внутренних компонентов фреймворка. Вставьте следующее в качестве вашего первого утверждения:
QCoreApplication app(argc, argv);
Во-вторых, обычным способом сетевого программирования в Qt является использование системы обработки событий. Поскольку вам, похоже, это не нужно, вам следует вместо этого использовать функции блокировки, чтобы операционная система получила возможность сообщить вашему приложению, что данные поступили.
Вы должны использовать waitForReadyRead()
перед попыткой чтения из сокета.
Прочитайте документацию для получения более подробной информации о блокирующих и неблокирующих функциях API.
Ответ №2:
Вы должны заменить строку
if(tcpSocket->bytesAvailable!=0)
Для
if(tcpSocket->bytesAvailable()!=0)
Комментарии:
1. Спасибо, ИГОРЬ, но QTcpSocket по-прежнему не получает данные.
2. поместите waitForConnected() после connectToHost и qDebug()<<TCPSocket-> state()<<TCPSocket->errorString(); что выводится?