Я разработал tcp-сервер с qt в Windows. к серверу подключено около 10-20 клиентов и происходит обмен данными между сервером и клиентами. Есть разные темы для каждого подключенного клиента. Сервер отправляет пакет и ожидает ответа на этот пакет данных, если прием ACK затем отправляет следующий пакет. Тайм-аут, если нет ответа. Если клиент не отправляет ответ в течение 2 минут, мой сервер отправляет тот же пакет снова.
С этим проблем нет. (Между прочим, мой компьютер Windows7 Home Premium) Когда я переносу свое приложение на другой компьютер с Windows7 Ultimate, если есть тайм-аут, вместо повторной отправки того же пакета данных, он ничего не делает. Другое различие между моим компьютером и этим компьютером состоит в том, что на этом компьютере не установлен qt. Я запускаю свое приложение с необходимыми DLL.
Что может вызвать эту проблему?
Заранее спасибо.
Прежде всего, чтобы сохранить номенклатуру в порядке:
IP реализован как драйвер устройства, TCP реализован как драйвер, играющий поверх него, soket — это библиотека, связанная с приложением (может быть статической или динамической), а все элементы QT — это библиотека, которая использует сокеты для передачи данных.
Роль разбиения потокового потока на сегменты принадлежит библиотеке сокетов, роль разбивать сегмент на пакеты, перечислять их, проверять, отсутствует ли что-то и запрашивать повторную передачу, принадлежит TCP.
Ваш код НЕ должен заботиться обо всех них: он просто должен отправлять и получать данные и управлять состоянием ошибки, которое базовый сокет может сообщить в случае постоянного и неисправимого сбоя TCP.
Это не ваша роль кода для определения тайм-аутов сети (есть хорошо установленный и определенный стандарт эта дата более 30 лет: если вы занимаетесь чем-то другим, то просто лишаете жизнь сетевого менеджера и не добавляете ценности вашему приложению)
Ваша проблема, скорее всего, заключается в конфликте между вашим временем и «управлением передачей» и согласованным временем согласования TCP (которое также зависит от размера буфера avaliale в драйверах обеих сторон и может варьироваться не только в зависимости от ОС, но и от что на самом деле делают ОС со временем), что делает две системы управления нестабильными.
Других решений пока нет …