Синхронное соединение QTcpServer

Я пытался использовать механизм синхронного соединения QTcpServer для реализации сервера. Мой код очень простой. ПФБ.

//////

MainScreen::MainScreen(QWidget *parent) :
QMainWindow(parent),
    ui(new Ui::MainScreen)
{
    ui->setupUi(this);
    server = new QTcpServer();

}


int MainScreen::waitForConnection()
{
    bool timeOut = 0;

    if (server->listen(QHostAddress("192.168.70.30"), 10000))
    {

        quint16 port = server->serverPort();
        qDebug() << "Server : "<< (server->serverAddress()).toString() << "Port : "<< port;
        server->waitForNewConnection(-1, &timeOut);
    }

    return 0;
}

//главный

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainScreen w;

    w.waitForConnection();

    return a.exec();

}

И я пытаюсь подключиться к серверу из клиентского приложения Linux (C). К сожалению, у меня нет соединения с моим сервером. Нужно ли мне делать что-то еще, чтобы работать с синхронным соединением? заранее спасибо

PFB результат netstat

netstat -np TCP

Активные соединения

Протолокальный адрес Состояние внешнего адреса

TCP 127.0.0.1:62908 127.0.0.1:62909 УСТАНОВЛЕН

TCP 127.0.0.1:62909 127.0.0.1:62908 УСТАНОВЛЕН

TCP 192.168.70.89:62817 10.47.1.10:49224 УСТАНОВЛЕН

TCP 192.168.70.89:62924 10.47.1.101:3128 УСТАНОВЛЕН

TCP 192.168.70.89:63209 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63213 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63264 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63265 10.47.1.101:3128 TIME_WAIT

TCP 192.168.70.89:63266 10.47.1.11:8014 CLOSE_WAIT

TCP 192.168.70.89:63267 111.221.112.54:995 TIME_WAIT

TCP 127.0.0.1:62908 127.0.0.1:62909 УСТАНОВЛЕН


person vraj010    schedule 12.08.2013    source источник
comment
Как вы пытаетесь подключиться к вашему серверу? Какой порт вы используете? Сервер слушает 192.168.70.30, да. Но на случайный порт.   -  person Greenflow    schedule 12.08.2013
comment
Я пытаюсь подключиться к серверу через порт «10000».   -  person vraj010    schedule 13.08.2013
comment
Совет флота хорош. Попробуйте QHostAddress::Any. Или попробуйте 127.0.0.1 и посмотрите, сможете ли вы подключиться локально. Ваш код хорош и должен работать. Я полагаю, когда вы пытались, ваша машина действительно имела адрес 192.168.70.30? Потому что, когда вы использовали netstat, это было 192.168.70.89.   -  person Greenflow    schedule 13.08.2013
comment
Теперь я использую QHostAddress::Any, и мой сервер находится на 192.168.70.89. Результат netstat не показывает мой порт.   -  person vraj010    schedule 13.08.2013
comment
Код хороший. Я скопировал/вставил ваш код, просто чтобы быть уверенным. У меня не было проблем с подключением по телнету. Больше похоже на вашу сеть. В чем бы ни была проблема, это не строки выше.   -  person Greenflow    schedule 13.08.2013
comment
Измените netstat -np TCP на netstat -nlp TCP.   -  person Greenflow    schedule 13.08.2013
comment
Да... Я пытался подключиться с помощью шпатлевки с того же ПК. Это работает ... Но не с других компьютеров в сети ... Я новичок в этих сетевых вещах.   -  person vraj010    schedule 13.08.2013
comment
Это более или менее конец этой «нити». Тогда даже для вас ваш код работает. Отсюда очень сложно, если вообще возможно, отладить конфигурацию вашей локальной сети. :-)   -  person Greenflow    schedule 13.08.2013
comment
Хорошо, спасибо... не знаю, как это решить...   -  person vraj010    schedule 13.08.2013


Ответы (1)


Несколько вещей, которые нужно проверить:

  • На сервере он действительно прослушивает входящие соединения? Запустите netstat -lt в Linux или netstat -ta в Windows и проверьте, открыт ли порт в состоянии прослушивания.
  • Используйте QHostAddress::Any, а не конкретный адрес на хосте, если у него есть проблемы с этим адресом.

Дополнение: вам нужно запустить netstat в Windows с помощью команды netstat -nap TCP, чтобы он показывал порты прослушивания. Но поскольку вы можете подключиться к сетевому серверу локально, это показывает, что он работает. Похоже, вы бегаете под окнами. Если да, то пытались ли вы отключить брандмауэр Windows? Если вы используете антивирус, попробуйте отключить и его, если он блокирует соединения извне. Наконец, убедитесь, что машины видят друг друга через ping.

person fleed    schedule 12.08.2013
comment
Я добавил результат netstat.... Я не смог найти в нем свой порт. И я безуспешно пытался использовать QHostAddress::Any. - person vraj010; 13.08.2013