Название: Не запускается TcpServer на Linux Отправлено: Viktor от Май 26, 2016, 15:43 Есть tcp сервер и он исправно работает на Windows, но когда я перекинул его на Astra Linox, то он перестал запускаться. Ошибок никаких не выдаёт, просто не запускается консоли и пишет, что Сервер НЕ запущен.... Пробовал и пересобирать и заново писать, но всё никак. Может кто знает в чём может быть проблема? Везде стоит Qt 5 версии.
Вот код: #include "tcpserver.h" tcpServer::tcpServer(QObject *parent) : QTcpServer(parent) { clientSocket = new QTcpSocket(this); serverSocket = new QTcpSocket(this); connect(serverSocket,SIGNAL(readyRead()),SLOT(readSocket())); //Коннект чтения сокета } tcpServer::~tcpServer() {} //Функция, которая слушает клиента и объявляет запущен ли сервер или нет bool tcpServer::server_start(QHostAddress addr, qint16 port) { if (!listen(addr, port)) { qDebug() << "Ошибка при запуске сервера!"; return false; } else { qDebug() << "Сервер успешно запущен!"; return true; } } //Функция, которая принимает соединение void tcpServer::incomingConnection(int socketDescriptor) { clientSocket->connectToHost(QHostAddress::LocalHost, 60000); qDebug() << "Сокет" << socketDescriptor << "Успешно установил соединение!\n"; if(!serverSocket->setSocketDescriptor(socketDescriptor)) { emit error(serverSocket->error()); return; } } //Функция чтения void tcpServer::readSocket() { packetIN.clear(); QDataStream in(serverSocket); for(;;) { if(!next_block_size) { if(serverSocket->bytesAvailable() < sizeof(quint16)) break; } in >> next_block_size; if(serverSocket->bytesAvailable() < next_block_size) break; in >> socketHeader; in >> packetIN; next_block_size = 0; } qDebug() << "***Приём пакета с заголовком: " << socketHeader; emit requestTOBD(socketHeader, packetIN); //Сигнал чтения } //Функция записи (Записывает заголовок и массив из строк) void tcpServer::writeSocket(QByteArray socketHeader, QList<QStringList> tableData) { //QTextStream out(stdout); QByteArray block; QDataStream st(&block, QIODevice::WriteOnly); st << quint16(0)<< socketHeader << tableData; st.device()->seek(0); st << quint16(block.size() - sizeof(quint16)); clientSocket->write(block); //out << "***Отправка пакета с заголовком: " << socketHeader << endl; qDebug()<< "***Отправка пакета с заголовком: " << socketHeader << endl; } [/color] Название: Re: Не запускается TcpServer на Linux Отправлено: Alex Custov от Май 26, 2016, 15:57 Возможно проблема с параметрами addr, port. Возможно также, что т.к. Astra - это ОС для спецведомств, то там может быть впилен брэндмауэр, который запрещает слушать порты.
Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 26, 2016, 16:40 Возможно проблема с параметрами addr, port. Возможно также, что т.к. Astra - это ОС для спецведомств, то там может быть впилен брэндмауэр, который запрещает слушать порты. Спасибо за мысль....а то вообще идей никаких нет( И если это действительно так, то что тогда можно сделать? Или вообще подключиться по tcp соединению не получится? Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 26, 2016, 16:48 Какой вы используете номер порта?
Наверное < 1024? Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 26, 2016, 17:10 Название: Re: Не запускается TcpServer на Linux Отправлено: Hvzh от Май 26, 2016, 17:26 А errno для listen вывести никак не получится?
Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 26, 2016, 17:33 2 Viktor
Присоединяюсь к Hermann А errno для listen вывести никак не получится? Покажите что возвращает QAbstractSocket::SocketError QTcpServer::serverError() const и QString QTcpServer::errorString() const Название: Re: Не запускается TcpServer на Linux Отправлено: Hvzh от Май 26, 2016, 17:43 И вот еще что. При успехе listen возвращает 0. А у Вас это интерпретируется как ошибка.
Название: Re: Не запускается TcpServer на Linux Отправлено: PimenS от Май 26, 2016, 17:49 И вот еще что. При успехе listen возвращает 0. А у Вас это интерпретируется как ошибка. Почему 0? Вроде Returns true on success; otherwise returns false. Название: Re: Не запускается TcpServer на Linux Отправлено: Hvzh от Май 26, 2016, 17:50 Почему 0? Вроде Returns true on success; otherwise returns false. RETURN VALUE On success, zero is returned. On error, -1 is returned, and errno is set appropriately. Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 26, 2016, 17:56 Почему 0? Вроде Returns true on success; otherwise returns false. У ТС вызывается метод listen класса QTcpServer.Название: Re: Не запускается TcpServer на Linux Отправлено: Hvzh от Май 26, 2016, 17:56 Упс... Ошибочка... Я listen'ы перепутал...
Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 11:19 2 Viktor Присоединяюсь к Hermann А errno для listen вывести никак не получится? Покажите что возвращает QAbstractSocket::SocketError QTcpServer::serverError() const и QString QTcpServer::errorString() const Ничего не пишет. Возможно я что-то не так делаю? Я добавил сигнал connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError))); и функцию void tcpServer::onError(QAbstractSocket::SocketError socketError) const { switch (socketError) { qDebug()<<serverSocket->errorString(); break; case QAbstractSocket::RemoteHostClosedError: break; case QAbstractSocket::HostNotFoundError: default: break; } } Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 11:33 Ничего не пишет. Возможно я что-то не так делаю? Сразу после вызова listen добавьте строку: Код
Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 11:46 Ничего не пишет. Возможно я что-то не так делаю? Сразу после вызова listen добавьте строку: Код
Так так, пишет: "The bound address is already in use" Не понятно, как он может уже использоваться? Получается, что какой бы я порт не использовал - пишут одно и то же. Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 11:48 Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 15:18 Ввёл, не могу найти своё соединение! Нашёл только соединение клиентское, которое должно подключиться к серверу и у него статус LISTEN. Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 15:21 Ввёл, не могу найти своё соединение! Нашёл только соединение клиентское, которое должно подключиться к серверу и у него статус LISTEN. Как может "клиентское подключение" слушать порт?Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 15:36 Ввёл, не могу найти своё соединение! Нашёл только соединение клиентское, которое должно подключиться к серверу и у него статус LISTEN. Как может "клиентское подключение" слушать порт?у меня же сервер может тоже клиенту что-то передавать. Вообще связь такая: клиент посылает запрос серверу, сервер запрос обрабатывает и получает данные из базы данных и отсылает эти данные клиенту. Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 15:43 у меня же сервер может тоже клиенту что-то передавать. Вообще связь такая: клиент посылает запрос серверу, сервер запрос обрабатывает и получает данные из базы данных и отсылает эти данные клиенту. Для передачи в обе стороны можно использовать один канал. Т.е. клиент подключается к серверу, формируется канал связи, у каждой стороны появляется сокет, через который стороны как получают, так и отправляют данные.Для чего серверу подключаться к клиенту? Для чего клиент слушает порт, да еще и такой же как сервер? Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 16:16 у меня же сервер может тоже клиенту что-то передавать. Вообще связь такая: клиент посылает запрос серверу, сервер запрос обрабатывает и получает данные из базы данных и отсылает эти данные клиенту. Для передачи в обе стороны можно использовать один канал. Т.е. клиент подключается к серверу, формируется канал связи, у каждой стороны появляется сокет, через который стороны как получают, так и отправляют данные.Для чего серверу подключаться к клиенту? Для чего клиент слушает порт, да еще и такой же как сервер? я в этой теме новичок...приму к сведению. может тогда у меня получился не клиент сервер, а сервер сервер - тогда? После того, как я прописал netstat -nlp отобразили все подключения и так же отобразились 2-а моих "сервера" и у всех статус LISTEN. Сервер запустился, но они не законектились.... Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 16:23 может тогда у меня получился не клиент сервер, а сервер сервер - тогда? Получается так. :)В таком случае лучше не называть их клиентом и сервером, т.к. они равноправны. Лучше их называть пирами (peer), как в i2p сетях. После того, как я прописал netstat -nlp отобразили все подключения и так же отобразились 2-а моих "сервера" и у всех статус LISTEN. Сервер запустился, но они не законектились.... А порты прослушиваемые у них какие?Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 16:39 Один прослушивает порт 43000
Другой прослушивает порт 45000 Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 16:41 Один прослушивает порт 43000 Ну т.е. разные порты.Другой прослушивает порт 45000 Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 16:44 Один прослушивает порт 43000 Ну т.е. разные порты.Другой прослушивает порт 45000 да, порты слушают разные.... Вот у меня ещё со стороны второго сервера такие ошибки вскакивают, может в них проблема? (http://savepic.ru/9888313m.jpg) (http://savepic.ru/9888313.htm) А это в netstat -nlp отображается (http://savepic.ru/9859640m.jpg) (http://savepic.ru/9859640.htm) Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 16:54 Вот у меня ещё со стороны второго сервера такие ошибки вскакивают, может в них проблема? Это вы про ошибки fontconfig?Нет это какие-то проблемы настройки шрифтов. Они не причем. Запускайте ваши программы на разных ip-адресах (не разных компьютерах), тогда не будет конфликтов по портам. Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 17:07 Вот у меня ещё со стороны второго сервера такие ошибки вскакивают, может в них проблема? Это вы про ошибки fontconfig?Нет это какие-то проблемы настройки шрифтов. Они не причем. Запускайте ваши программы на разных ip-адресах (не разных компьютерах), тогда не будет конфликтов по портам. Хм...логика просматривается, возможно вы и правы. Это же всё таки Linux. На днях попробую так сделать. Надеюсь, что получится и проблема была в этом. Название: Re: Не запускается TcpServer на Linux Отправлено: Old от Май 27, 2016, 17:09 Это же всё таки Linux. Да как бы в других ОС должно быть также, протокол tcp/ip на всех платформах должен работать одинаково.Название: Re: Не запускается TcpServer на Linux Отправлено: Viktor от Май 27, 2016, 17:12 Это же всё таки Linux. Да как бы в других ОС должно быть также, протокол tcp/ip на всех платформах должен работать одинаково.Странно, почему у меня тогда на Windows всё отлично функционирует. Ладно, позже попробую сделать на разных машинах и напишу о результате. Благодарю за помощь! |