Проблема переполнения с winsock в vb6 - PullRequest
0 голосов
/ 31 мая 2011

Я создал простой проект, в котором используется инструмент «Winsock».

Когда я получаю какие-либо данные, я помещаю их в переменную, потому что я не могу поместить их в текстовое поле, потому что это файл, а не файл.text.

Но если я отправлю большой файл, он получит сообщение об ошибке.

"Переполнение"

Есть ли способ решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 31 мая 2011

Строка переменной длины VB теоретически может иметь размер только 2 ГБ, ее фактический максимальный размер зависит от доступной виртуальной памяти, которая также ограничена 2 ГБ для всего приложения.Но поскольку VB хранит строку в формате Unicode, это означает, что она может содержать только 1 ГБ текста.

( максимальная длина строки в VB6 )

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

0 голосов
/ 31 мая 2011

Вам нужно разделить ваши данные на более мелкие пакеты (примерно 2-5k каждый должен делать это) и отправить каждый пакет в отдельности, а затем перестроить ваши пакеты на другом конце. Вы можете добавить уникальный символ в конце данных, чтобы принимающая сторона знала, что все данные были получены для этой передачи, скажем Chr(0)?

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

0 голосов
/ 31 мая 2011

Правильно ли вы обрабатываете событие SendComplete перед отправкой дополнительных данных?

В противном случае вы получите переполнение буфера из элемента управления WinSock.

...