Про WINSOCK

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Про WINSOCK

Сообщение Ariman » 02.09.2003 (Вт) 17:30

Доброго дня/вечера/ночи всем.
У меня вопрос: Если делать 2д игру(типа два героя ходят по карте размером с экран и мочат друг друга разным оружием),
то какой протокол использовать? C TCP/IP проблемы -
быстроменяющиеся данные(напр. координаты героя) не получается передавать - клиент получает сплошную непрерывную строку
т.е. координата Х изменяется 10,20,30,40 и тд. Клиент получает
10203040. Ничего не помогает.
А с протоколом UDP я вообще дела не имел.
Вот та же Диабла какой протокол юзает?

kashey
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 17.01.2003 (Пт) 15:44

Сообщение kashey » 02.09.2003 (Вт) 20:38

если хочешь игры писать то переходи на DARK basic. и пиши хоть 2D хоть 3D без проблем. Прямо там в хелпе про сеть примеров уйма (даже уже есть написаная подобная игрушка) и библиотек почти не юзает (правда весит побольше, но не на много )

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 03.09.2003 (Ср) 17:17

Я бы все же хотел решить эту проблему на ВБ.
Так что, если кто занет, посоветуйте плз.

А можно по-подробнее про Dark Basic?
Никогда не слышал....

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.09.2003 (Чт) 9:38

DirectPlay из DirectX
Lasciate ogni speranza, voi ch'entrate.

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 04.09.2003 (Чт) 10:11

TCP более тормознуты, потому что с гарантированной доставкой (проверяются контрол. суммы, повторно посылаются пакеты, после каждого приема требуется отправить подтверждение приема.... вообщем - надежный и тормознутый)
UDP - без всяких лишних проверок, данные посылаются и пофиг дошли они или нет, поэтому получается ощутимо быстрее. Практически все сетевые игры (стрелялки, ходилки, бродилки) используют UDP. Он для них идеально подходит, даже если какие-то передаваемые координаты потерялись по пути, для игры это не проблема, ну замрет твой герой, вон КС тоже использует UDP (о чем честно пишет при загрузке) и проблемы плохой связи - это твои проблемы, а не игры... :)
Главное двигаться не быстрее, чем думает твоя голова.

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 04.09.2003 (Чт) 11:39

SergeySV, спасибо за подробную справку.
Как наладился винсок, я попробовал этот протокол - все работает!
Тока вот в чем проблема.... Необходимо указывать IP адреса друг-друга.... C TCP/IP просто указываешь адрес сервера и все.......
Слушай, а в UDP надо указыват IP только для отправки для отправки?
Может ла прога получить пришедшую инфу, если не указан RemoteHOS с к-рого она пришла?
Т.Е.
Можно ли сделать так: в первой проге указывать IP с которым коннектишься, прога по заданнома порту посылает свой IP
Во второй проге(на втором компе) RemoteHost не указан.
Она получает данные, устанавливает RemoteHost, и тогда уже начинает обмен остальными данными(напр. координатами игрока)
Будет такое работать? Или надо перед началом передачи
установить на ОБОИХ прогах RemoteHost друг-друга?

P.S.
Получилось как-то путано, но надеюсь ты поймешь про что я говорю.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 04.09.2003 (Чт) 12:09

Ariman писал(а):SergeySV, спасибо за подробную справку.
Можно ли сделать так: в первой проге указывать IP с которым коннектишься, прога по заданнома порту посылает свой IP
Во второй проге(на втором компе) RemoteHost не указан.
Она получает данные, устанавливает RemoteHost, и тогда уже начинает обмен остальными данными(напр. координатами игрока)
Будет такое работать? Или надо перед началом передачи
установить на ОБОИХ прогах RemoteHost друг-друга?

Пакет IP (уровень ниже), содержит IPAdress отправителя. UDP порт, с которого отправлен пакет. При приёме пакета, .RemoteIP и .RemotePort устанавливаются по этим данным. Но если они ещё не инициализированны (т.е. в т.ч. и небыло принятых пакетов), то при попытке передачи возникнет ошибка.
При приёме пакета, необходимо:
.RemoteHost=.RemoteIP
Ariman писал(а):P.S.
Получилось как-то путано, но надеюсь ты поймешь про что я говорю.

Это точно.
ЗЫ. Если чужой пошлёт тебе на этот порт фигню, то "играть" будеш уже с чужаком.

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 04.09.2003 (Чт) 12:57

Я попробовал сделать так(т.е. одна прога другой шлет АЙ ПИ), вроде работает. Но тут новый вопрос. Как сделать, чтоб несколько могли коннектится? В TCP/IP все просто, а тут........
P.S. че за пакет IP? И ещё, нельзя порты фиксировать, не посылать их?
скажем, 2000 и 2001. Чтоб меньше проблем. Я сделал именно так, вроде работает.
Только ведь не проверить по-нормальному. Только по адресу 127.0.0.1 :(

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 04.09.2003 (Чт) 14:08

Ariman писал(а):Как сделать, чтоб несколько могли коннектится? В TCP/IP все просто, а тут........

Тогда ты сам должен делать селекцию (посылать имя игрока или т.п.).
Ariman писал(а):P.S. че за пакет IP?

Это носитель информации, между двумя хостами. Его задача "донести" пакет до адресата, пройдя через маршрутизаторы. Протоколу IP, абсолютно параллельно, какая прога послала этот пакет, и получит ли его ожидающая прога. Эта задача протоколов TCP и UDP. Задачей TCP и UDP является доставка полученного пакета к конкретной проге (по номеру порта).
Ariman писал(а):И ещё, нельзя порты фиксировать, не посылать их?
скажем, 2000 и 2001. Чтоб меньше проблем. Я сделал именно так, вроде работает.

Номера портов посылаются вне зависимости от твоего желания, стандарт. Выбрать порты, которые будет использовать твоя прога можеш. Порты до 120 используют стандартизированные службы. Набери Netstat -s и выбери любой свободный.
Ariman писал(а):Только ведь не проверить по-нормальному. Только по адресу 127.0.0.1 :(
99.9% сетевых функций можно проверить только используя 127.0.0.1 . Кстати, по непроверенным данным, можно на loopback интерфейс повесить несколько адресов.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Re: Про WINSOCK

Сообщение GoGosha » 04.09.2003 (Чт) 14:22

Ariman писал(а):Доброго дня/вечера/ночи всем.
У меня вопрос: Если делать 2д игру(типа два героя ходят по карте размером с экран и мочат друг друга разным оружием),
то какой протокол использовать? C TCP/IP проблемы -
быстроменяющиеся данные(напр. координаты героя) не получается передавать - клиент получает сплошную непрерывную строку
т.е. координата Х изменяется 10,20,30,40 и тд. Клиент получает
10203040. Ничего не помогает.
А с протоколом UDP я вообще дела не имел.
Вот та же Диабла какой протокол юзает?


Отправлять числа ЧЕРЕЗ СТРИНГ- ЭТО ОООЧЕНЬ большой геморой, если на поле > 255 пикселей, то- Integer, если не - то байт, и без проблем
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 05.09.2003 (Пт) 12:49

Когда я спрашивал про то "Как сделать, чтоб несколько могли коннектится" я имел ввиду, что писть в remot host, port и к какому
порту bind'ить.
Может кто-нибуть подкинуть примерчик простенького чата или чего-нибудь в этом роде, где > двух человек, и протокол UDP?

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 08.09.2003 (Пн) 16:48

Taras2 писал(а):99.9% сетевых функций можно проверить только используя 127.0.0.1 . Кстати, по непроверенным данным, можно на loopback интерфейс повесить несколько адресов.


127.0.0.* - все адреса loopback в win9x имхо
Origin - это что?

Георгий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 126
Зарегистрирован: 08.08.2003 (Пт) 15:08
Откуда: Россия

Сообщение Георгий » 08.09.2003 (Пн) 16:50

Ariman писал(а):Когда я спрашивал про то "Как сделать, чтоб несколько могли коннектится" я имел ввиду, что писть в remot host, port и к какому
порту bind'ить.
Может кто-нибуть подкинуть примерчик простенького чата или чего-нибудь в этом роде, где > двух человек, и протокол UDP?


Один должен быть главным - сервером типа. Все шлют ему инфу на известный адрес и порт - он знает, кто в игре и рассылает все пришедшие данные всем, кроме того, что ему эти данные отправил.
Origin - это что?

SergeySV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 124
Зарегистрирован: 17.04.2003 (Чт) 14:39
Откуда: Россия, Москва

Сообщение SergeySV » 09.09.2003 (Вт) 13:28

Ariman просто спрашивает, как ему программно реализовать эту возможность множественного подсоединения... я сам этим никогда не занимался, только где-то краем глаза видел: самый тупой способо, конечно запустить несколько winsock, и еще как-то пишут, winsock один и он переключался между host'ами, поддерживая с каждым связь... ща поищу эту статейку...
Главное двигаться не быстрее, чем думает твоя голова.

Волкер
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 21.10.2002 (Пн) 15:59
Откуда: Russia

Сообщение Волкер » 12.09.2003 (Пт) 6:50

тут был в форуме примерчик не плохой ссылку не наиду сейчас , если сам не наидеш могу скинуть
мыло скажи

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.09.2003 (Пт) 6:57

Мыло r.aristov_s.mail@nm.ru
Заранее благодарен.


Я тут игру одну написал, но для одного компа(два человека за одной клавиатурой). Хочу попробовать из нее сетевую сделать......

Pivusik
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 27.08.2003 (Ср) 13:25
Откуда: Новый Уренгой

Сообщение Pivusik » 16.09.2003 (Вт) 10:14

Хм... тык это нафик убери сервер с игрушки, напиши сервер отдельно, пусть он же и логику отслеживает, а игрушка только будет передавать ему чуть ли не нажатие кнопок...

Пусть сервер передает карту, естественно игрушка сама её будет знать, а сервак только имя говорить, жмеш шаг вперед, данные уходят на сервер, сервак рассылает всем что ИГРОК1 сделал шаг в перед на 1 еденицу, Сам же кто посылал, может или дождаться пока ему сервак скажет что ты сделал шаг вперед, или сам шагать...

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

Вот лови Шашки, сетевые, логика не проследывается, просто игровое поле и шашки, сделано по ТСП из этого свои глюки :=)
Вложения
Shashki.zip
Нет.Шашки в 1.0
(64.64 Кб) Скачиваний: 35
Shashki.zip
Нет.Шашки в 1.0
(64.64 Кб) Скачиваний: 52
©Wind


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

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

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

    TopList