Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

(Qt/C++) QTcpSocket подключение 2 устройств по внутренней сети.

st que Ученик (132), закрыт 1 год назад
Есть 2 приложения (клиент и сервер) созданные на основе примеров книги (Qt 5.10. Профессиональное программирование на C++ (Шлее М.)).

Если запускать оба приложения на 1 компьютере, то сервер устанавливает связь и может получать данные от клиента, но у меня не получается подключиться к серверу с другого компьютера. Оба устройства подключены к одному WI-FI.

IP адрес компьютера получаю следующим образом:
for (const QHostAddress &address: QNetworkInterface::allAddresses()) {
if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) {
return address.toString();
}
}

Отключение брандмауэра на обоих устройствах ничего не дало.
Лучший ответ
Артем Лоули Знаток (294) 1 год назад
Если у тебя возникают проблемы с подключением Qt-сервера из другого компьютера в одной локальной сети, вот несколько рекомендаций:

Убедись, что оба компьютера подключены к одной Wi-Fi сети или сети с одним маршрутизатором. Убедись, что все устройства находятся в одном подсетевом диапазоне.

Проверь, что серверное приложение прослушивает правильный IP-адрес и порт. Убедись, что передаешь правильный IP-адрес сервера клиентскому приложению для подключения.

Проверь, что используемый порт не заблокирован на компьютере сервера. Попробуй временно отключить брандмауэр на сервере или разреши входящие соединения на указанном порту.

Убедись, что настройки безопасности сети не блокируют входящие соединения на указанном порту. Обратись к администратору сети или провайдеру для проверки и настройки безопасности сети.

Если возможно, попробуй использовать статический IP-адрес для сервера, чтобы избежать возможных проблем с динамическими IP-адресами.

Проверь, что серверное приложение правильно настроено для прослушивания входящих соединений и подключений от удаленных устройств.

Если проблема продолжается, попробуй использовать другую библиотеку или фреймворк для сетевого взаимодействия в своем приложении. Иногда различные библиотеки могут иметь различные особенности и лучше подходить для определенных сценариев.

Если ничего из вышеперечисленного не помогло, пожалуйста, предоставь больше информации о том, как ты создаешь и настраиваешь серверное приложение, и я постараюсь помочь тебе более конкретно.
Остальные ответы
/bin/laden Искусственный Интеллект (107439) 1 год назад
не юзал Qt
вангую, QNetworkInterface::allAddresses выдает адреса всех локальных адаптеров.
st queУченик (132) 1 год назад
Да, а return прерывает их поиск после первого же подходящего адреса.
/bin/laden Искусственный Интеллект (107439) st que, и при этом смысл получения локального адреса для связи с удаленным устройством отсутствует.
Professional Professional Мудрец (15767) 1 год назад
Прежде всего, убедитесь, что вы используете корректный IP-адрес и порт сервера при попытке подключиться к нему с другого компьютера.

Если вы используете правильные IP-адрес и порт, проверьте следующие моменты:

1. **Правильность IP-адреса и порта:** Убедитесь, что вы используете правильный IP-адрес и порт при попытке подключения. Вы должны использовать IP-адрес компьютера в вашей локальной сети, на котором запущен сервер.

2. **Проверка конфигурации сети:** Попробуйте подключиться к серверу с другого устройства в той же сети, чтобы убедиться, что проблема не в конфигурации сети.

3. **Проверка настроек сервера:** Убедитесь, что сервер настроен на прослушивание подключений с любого IP-адреса, а не только с localhost. Это можно сделать, передав `QHostAddress::Any` в метод `listen` вашего сервера:

```cpp
server->listen(QHostAddress::Any, port);
```

4. **Отключение брандмауэра:** Вы уже отключили брандмауэр, но в некоторых случаях может потребоваться настроить правила брандмауэра, чтобы разрешить входящие соединения к вашему приложению.

5. **Проверка роутера:** Некоторые роутеры могут блокировать входящие соединения. Проверьте настройки своего роутера, чтобы убедиться, что он не блокирует соединения к порту, который вы используете.

Если все эти шаги не помогут, возможно, вам придется воспользоваться сетевым анализатором, таким как Wireshark, чтобы увидеть, что происходит на сетевом уровне при попытке подключения к серверу.
Похожие вопросы