Winsock

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Winsock

Сообщение Ramauf » 09.02.2004 (Пн) 18:36

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

Tamahawk
Обычный пользователь
Обычный пользователь
 
Сообщения: 78
Зарегистрирован: 03.02.2004 (Вт) 22:11

Сообщение Tamahawk » 09.02.2004 (Пн) 19:22

можеш передать по частям (разделив на 2)
или я вопрос нетак понял

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

Сообщение xolod » 09.02.2004 (Пн) 19:33

А какой ты протокол используешь? Не UDP ли??

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

Tamahawk
Обычный пользователь
Обычный пользователь
 
Сообщения: 78
Зарегистрирован: 03.02.2004 (Вт) 22:11

Сообщение Tamahawk » 09.02.2004 (Пн) 19:51

TCP/IP
и зачем это

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 09.02.2004 (Пн) 20:16

UDP - Universal Datagram Protocol предназначен для передачи малых объёмов данных, в отличие от TCP-IP, так что ваш вибор совершенно верен :)
От себя также посоветую разбивать большие количества данных на мелкие части (приблизительно по нескольку килобайт)...

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 10.02.2004 (Вт) 2:36

Да передача малых фрагментов более удобна тем, чот можно легко оформить ПрогрессБар для отображения процесса передачи.
дели на до кусков в 1024 байта ... для круглости
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Сообщение Ramauf » 12.02.2004 (Чт) 20:27

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

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.02.2004 (Чт) 21:51

У меня тоже была такая проблема, интересно было бы услышать ответ.

Я думаю, что выход таков: отправляем кусок с сервера на клиент. Клиент принимает данные и отправляет серверу ответ - какую-нибудь комбинацию вроде "ok". Сервер не отправляет этому клиенту данные до тех пор, пока не примет подтверждение доставки уже отправленных.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 13.02.2004 (Пт) 9:58

Думаю все просто ..... можно отправлять с Сервера подтверждения на любое количество данных даже на маленькую порцию в 1024 байта ... но ... моно
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Dimacus
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 16.02.2004 (Пн) 9:27

Сообщение Dimacus » 16.02.2004 (Пн) 9:39

Привет Всем
Я вообщем то начинающий программер на VB, а до этого имею большой практический опыт на C++. Так вот мне не раз приходилось сталкиваться с WinSocket и могу Вас с Уверенностью сказать, что у данной реализации есть ограничения единожды передаваемых данных по протоколу TCP/IP :idea: они составляют чуть больгше 8Кб :twisted: .
Но здесь одно но :P , применяя WinSocket вы можете пережать функции send больше чем 8Кб данных и тогда библиотека сама его разобъет на куски и Вам они будут поступать порциями, так что эти порции вы должны просто сложить в память или на диске. Лучше всего созлать свой протокол данных, по которому можно будет с легкость отследить тип и размер передаваемых :!: и принимаемых :!: данные. я не вдаваолся в подробности почему именно 8Кб, но думаю где нибудь в реестре можно эту цифру изменить :idea:
Всем спасибо за внимание. Если какие нибудь другие вопросы по WinAPI, то можете писать или в ICA 123530718
:D
Programming is My life

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 16.02.2004 (Пн) 9:58

...если он сам... то сложнее отслеживать процнтное соотношение пришедших данных...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

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

Сообщение v-adix » 16.02.2004 (Пн) 11:14

используйте событие SendComplete. допустим есть глобальная перем. Global nxt as boolean

Private sub winsock1_sendcomplete()
nxt=true
end sub

sub waitfornext()
nxt=false
while nxt=false
doevents
wend
end sub

используйте waitfornext чтобы подождать пока сервер получит пакет, а потом отправляйте следующий.

Ramauf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 122
Зарегистрирован: 03.08.2003 (Вс) 21:10
Откуда: Кумертау

Сообщение Ramauf » 16.02.2004 (Пн) 13:28

А как делать свои собственные протоколы???

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 16.02.2004 (Пн) 19:29

Вот пример персылки файлов любого размера:
Вложения
Winsock_filetransfer_242002.zip
Пересылка файлов по WinSock
(15.66 Кб) Скачиваний: 47
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 17.02.2004 (Вт) 0:11

Ramauf писал(а):А как делать свои собственные протоколы???

смотря что ты понимаешь под протоколом.
Если я правильно понял то тебе нужнео сделать серверную программу с набором команд и клиент отсылающий эти команды (вот тебе и твой "протокол") .... простое клиент-серверное приложение, в зависимости от назначения называй его как хочешь.
POP3, SMTP, FTP ... тотже принцип.
Потом ставишь сервер у себя на машине, он у тебя постоянно загружен должен быть (соответственно слушать порт какой нить :) )
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Leonboy
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 23.12.2003 (Вт) 15:13

Сообщение Leonboy » 17.02.2004 (Вт) 11:49

А как поймать IP интернет соединения, а не локальной сети?
Когда делаю Winsock1.LocalIP, всё равно выдаёт IP локалки, а не интернета :-(

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

Сообщение v-adix » 19.02.2004 (Чт) 16:48

Leonboy писал(а):А как поймать IP интернет соединения, а не локальной сети?
Когда делаю Winsock1.LocalIP, всё равно выдаёт IP локалки, а не интернета :-(


всмысле? что значит IP локалки? ты что через LAN в интернет входишь?

Leonboy
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 23.12.2003 (Вт) 15:13

Сообщение Leonboy » 20.02.2004 (Пт) 2:38

Нет, этот комп в интернете через ADSL, а другие по LAN через него выходят в инет, и при попытке узнать его IP, мне выдаётся только IP в LAN, а не в интернете .

WEB_13
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 06.08.2003 (Ср) 8:02
Откуда: Reutov, Russia

Сообщение WEB_13 » 18.03.2004 (Чт) 15:08

У меня тоже такая проблема с передачей данных:
отправляю серверу запрос
Код: Выделить всё
Winsock1.SendData "GET http://www.rambler.ru" & vbCrLf

а он присылает мне не весь файл.
Как же сделать-то, чтобы весь присылал???
Format Hard Disk Completed


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList