Многопользовательское приложение (Winsock)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 19.09.2006 (Вт) 16:06

Думаю проще объяснить, что я имел ввиду.
Человеку нужно было многопользовательское приложение, то есть сервер, к которому могли бы подключаться несколько клиентов.

alibek сказал, что допускается шифрование траффика (как я понял посылаемых/принимаемых кооманд). Но я пока приведу пример без шифрования.

Создается сервер на базе WinSock с UDP протоколом.
Он биндится, например на 2006 порт.

Клиент Вася шлет серверу свой IP, порт и комманду, например "[168.133.78.34:2003]GIVE_ME_INFO"

Сервер посылает клиенту на указанный им IP и порт нужную информацию.

В таком случае подключаться может неограниченное количество пользователей, в отличие от TCP-протокола.

А момент шифрования можно добавить самому разными путями.

По-поводу не гарантированности соединения могу сказать следующее:

1) Попробуй протетстируй сколько из миллиона пакетов ты потеряешь при передачи от одного компа в локальной сети к другому.

2) Даже если будет теряться 0.01% пакетов, то в данном случае это легко защищается в коде 1 байтными подтверждениями сервера об успешной доставке.

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

Сообщение alibek » 19.09.2006 (Вт) 16:16

UDP все-таки создавался больше для диагностических и служебных целей. Клиент-сервер на нем писать нерационально.
Lasciate ogni speranza, voi ch'entrate.

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 19.09.2006 (Вт) 16:36

Я хотел написать программу типа IСQ. Согласен с cервером можно "общаться" по протоколу UDP, но с другими клиентами все равно придется по TCP\IP

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 19.09.2006 (Вт) 16:59

alibek писал(а):UDP все-таки создавался больше для диагностических и служебных целей. Клиент-сервер на нем писать нерационально.

Counter-Strike работает по UDP

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

Сообщение alibek » 19.09.2006 (Вт) 17:10

Я знаю. В CS не страшно, если не доставится один-два пакета из сотни.
Но большинство клиент-серверных систем работает по TCP.
Lasciate ogni speranza, voi ch'entrate.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 21.09.2006 (Чт) 12:34

alibek писал(а):Я знаю. В CS не страшно, если не доставится один-два пакета из сотни.
Но большинство клиент-серверных систем работает по TCP.


В CS доставляются все пакеты полностью.
Если пакет не доставился, он посылается ещё раз.

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

Сообщение alibek » 21.09.2006 (Чт) 12:45

Нет, если он не доставился, он пропускается.
Если пропущено слишком много, клиент отлетает.
Lasciate ogni speranza, voi ch'entrate.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 21.09.2006 (Чт) 16:17

alibek Это в каком же CS такая система?

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

Сообщение Amed » 21.09.2006 (Чт) 16:22

Да во всех версиях, имхо.

Зачем в cs вообще перепосылать устаревшие пакеты?

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

Сообщение alibek » 21.09.2006 (Чт) 16:29

|kerish| писал(а):alibek Это в каком же CS такая система?

А ты подумай логически.
Неужели ты будешь в мультиплейере держать для каждого клиента буфер, чтобы высылать устаревшие данные?
Lasciate ogni speranza, voi ch'entrate.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 24.09.2006 (Вс) 19:21

Вы не правы.

Amed писал(а):Да во всех версиях, имхо.
Зачем в cs вообще перепосылать устаревшие пакеты?


Во всех версиях CS Если предыдущий пакет не доходит, он посылается заново.
Недошедшие пакеты пересылаются заново, чтобы избежать эффекта дергания и синхронизации сетевого процесса игры.
Есть в CS такая команда cl_resend, которая обозначает время, через которое будет послан пакет, если предыдущий не дошел.

alibek писал(а):А ты подумай логически.
Неужели ты будешь в мультиплейере держать для каждого клиента буфер, чтобы высылать устаревшие данные?


Теперь ты подумай логически.
Так как сервер каждый раз сообщает об успешном приеме пакета, то пересылать придется максимум предыдущий пакет. А запоминать последние пакеты для нескольких (максимум 32-х) игроков вообще не проблема.

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

Сообщение alibek » 24.09.2006 (Вс) 20:20

Представляю картину маслом...
Игрока с плохим каналом уже давно убили, а сервер по прежнему посылает ему пакеты, по которым он еще забегает в корридор.
А у другого игрока, с каналом чуть получше, еще не слышна перестрелка.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение alibek » 24.09.2006 (Вс) 20:23

Такое, возможно, было в Doom 2 и Duk Nukem 3D, поэтому там мультиплейер у всех работал со скоростью самого тормозного клиента. Потому что хранить буфер состояний на каждого игрока в мультиплейере задача бессмысленная -- сервер должен вычислять оперативное состояние, а не вести учет изменений.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Amed » 24.09.2006 (Вс) 21:13

|kerish|, эффект дергания как раз и возникает от перепосылания пакетов.

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 24.09.2006 (Вс) 21:26

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

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

Сообщение Amed » 24.09.2006 (Вс) 21:30

Создай топик в холиварах :)
Народ должен познать истину!

Пред.

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

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

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

    TopList