Проблема с передачей данных с помощью WinSock

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Проблема с передачей данных с помощью WinSock

Сообщение XairOn » 03.12.2004 (Пт) 14:01

Здравствуйте, я конечно понимаю, что вопрос мой очень банальный и обсуждался на этом форуме не раз, но мне всё-таки непонятно, как сделать, что бы данные по пути не терялись. У меня такая проблема, передаю строку (довольно длинную строку, порядка 5-6 кБ... хотя может быть и больше, точно не знаю), а до клиента доходит чуть больше половины, вобщем обрезанная строка доходит. Подскажите пожалуйста, как я могу исправить этот глюк.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 03.12.2004 (Пт) 17:09

Смотря какой ты используешь протокол:
- если TCP - то я проблеммы не вижу (я с этим видом почти не работаю)
- если UDP - то размер посылаемой строки ограничен параметрами сети

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

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 03.12.2004 (Пт) 17:58

разбиваешь строку на куски и кидаешь поочереди

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

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 03.12.2004 (Пт) 19:06

Наверное что-то я не понимаю...

После метода SendData идёт прямая пересылка данных, без склеевания с передыдущими.

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 03.12.2004 (Пт) 19:47

Ну значит их GetData склеивает, сам попробуй с сервера две строки подряд послать, а клиент пусть 2 раза примет, я посмотрю, как у тебя это получится :-)

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.12.2004 (Сб) 3:11

Посылай следующую порцию данных, только после того, как будет вызвано событие для предыдущей
Код: Выделить всё
Private Sub Winsock1_SendComplete()
'
End Sub


И "склеиваться" ничего не будет :wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 04.12.2004 (Сб) 19:35

XairOn писал(а):
разбиваешь строку на куски и кидаешь поочереди

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

это ранее уже обсуждалось. я все подробно описал в http://bbs.vbstreets.ru/viewtopic.php?t=11408 теме.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 7

    TopList