Какой компонент сокета VB6 может повторно использовать связанные порты? - PullRequest
0 голосов
/ 22 июля 2010

Я обновляю устаревший код, написанный на VB6, используя элементы управления Winsock.По сути, я пытаюсь подключить 4 компьютера через локальную сеть, чтобы компьютеры могли обмениваться файлами друг с другом при необходимости.Первоначально, как только связь была установлена, они удерживали их на неопределенный срок.Однако через 12-24 часа эти ошибки могут быть восстановлены.

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

Моя мысль - устанавливать соединения только по требованию, когда необходимо отправить файл, чтобы избежать этой возможности.Проблема, с которой я сталкиваюсь, заключается в том, что вы не можете подключиться через один и тот же порт в течение четырех минут .Таким образом, не более одного файла может быть отправлено в четырехминутном окне (если у вас не все файлы одновременно, но они генерируются в разное время). Использование трех портов позволяет отправлять три файла одновременно (по одному для каждого узла).) но потом я заперт еще на четыре минуты.Я мог бы продолжать добавлять порты, но в лучшем случае это выглядит не элегантно и в худшем случае не будет разрешено их ИТ-отделом.

Есть идеи?Я не могу найти другие элементы управления сокетом для VB6, которые позволяют повторно используемые связанные порты .

1 Ответ

0 голосов
/ 22 июля 2010

«Четыре минуты задержки» относятся к соединению, где TCP-соединение представляет собой 4-кортеж, состоящий из локального IP-адреса, локального порта №, удаленного IP-адреса и удаленного порта №.

Обычно это толькопроблема для клиента, который пытается установить соединение с сервером, используя одно и то же значение локального порта.Для элемента управления Winsock вы можете просто попытаться установить для LocalPort значение 0, прежде чем пытаться установить каждое новое подключение к удаленному серверу.

Другой способ избежать соединений, находящихся в режиме TIME-WAIT, - это обязательно активно ЗАКРЫТЬ соединение, когдаСобытие CLOSE вызывается другим концом.

Использование 3 портов для отправки 3 файлов кажется немного странным.Я не думаю, что это даст вам какую-то производительность по сравнению с отправкой трех файлов один за другим по одному соединению.

...