Открытие порта для прослушивания

У меня есть небольшая программа, которую я создал. Вот соответствующий фрагмент этого:

void TcpSocket::ConnectSocket()
{
    socket = new QTcpSocket(this);
    socket->connectToHost("localhost", 77);

    if(socket->waitForConnected(3000)){
        qDebug() << "Connected";

        socket->write("Hello Server\n\r\n");
        socket->waitForBytesWritten(1000);
        socket->waitForReadyRead(3000);
        qDebug() << "Reading: " << socket->bytesAvailable();
        qDebug() << socket->readAll();
        socket->close();
    }
    else {
        qDebug() << "Could not connect";
    }
}

По сути, я хочу открыть tcp-сокет на localhost: 77. Я хочу записать в него некоторые данные, получить ответ, а затем вывести ответ. Однако прямо сейчас этот порт закрыт, так как большинство портов по умолчанию находятся в Ubuntu. Так что сейчас он не может подключиться к этому порту для прослушивания. Из того, что я исследовал, iptables кажется единственным способом открыть порт для прослушивания. Поэтому я запускаю эту строку на своем компьютере:

sudo iptables -A INPUT -p tcp --dport 77 -j ACCEPT

Однако порт 77 все еще не открыт.

sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1199/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1004/cupsd      
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1157/postgres   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1121/mysqld     
tcp6       0      0 ::1:631                 :::*                    LISTEN      1004/cupsd      
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1199/dnsmasq    
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1070/dhclient   
udp        0      0 0.0.0.0:39617           0.0.0.0:*                           990/avahi-daemon: r
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           990/avahi-daemon: r
udp6       0      0 :::57021                :::*                                990/avahi-daemon: r
udp6       0      0 :::5353                 :::*                                990/avahi-daemon: r

netstat не показывает, что он открыт. Также у меня все еще есть та же проблема с моей программой: она не может подключиться к 77.

2
задан 30 May 2013 в 06:07

2 ответа

Вы, кажется, немного смущены относительно того, что означает "слушание" на порте. Для прислушиваний к входящим соединениям на порте приложение должно явно сказать операционной системе, что это готово принять соединения на том порте. Как Bert упомянул в своем ответе, слушающий на порте 77 будет (с конфигурацией по умолчанию), требуют полномочий пользователя root.

Если Вы хотите создать простой "тестовый" сервер, который может быть установлен, слушают на указанном порте и что можно взаимодействовать с, смотреть на netcat командаManpage icon. В основном Вы хотите сделать это:

sudo nc -l 77

Теперь попытайтесь запустить свое спокойное приложение. Необходимо видеть "Привет Сервер", отображенный в терминале, который работает netcat. Если Вы изменяете тайм-аут в QTcpSocket::waitForReadyRead() к чему-то большому (как 30000, равняйтесь 30 секундам), можно экспериментировать с передачей обратно ответов на приложение.

Например, запуститесь netcat управляйте снова и запустите свое спокойное приложение. После дисплеев терминала "Привет Сервер", введите что-то в терминал и нажмите клавишу Return. Ваше спокойное приложение должно распечатать то, что Вы ввели к консоли.

13
ответ дан 30 May 2013 в 06:07

Если вы используете authbind для запуска tomcats, тогда нам не нужны iptables или какие-либо программы для перенаправления правил, надеюсь, эта ссылка будет полезной.

https://askubuntu.com/a/685306/377678

0
ответ дан 30 May 2013 в 06:07

Другие вопросы по тегам:

Похожие вопросы: