Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

пресловутое окно активных игр [D6, Win2k]


dimmu2 ©   (2002-06-12 11:53:00) 

Добрый день, Мастера! Я был бы очень признателен, если бы Вы объяснили мне одну интересную вещь.
Наверняка, все кто играл в компьютеные игры видел как организуется создание и подключение к играм по сети с несколькими игроками (т.н. «Мультиплеер») :)
Так вот, происходит это следующим образом: один создает игру, а остальные ждут перед окном со списком активных игр и нажимают «Refresh» и как только игра создана в этом окошечке появляется ее название, все туда кликают и происходит соединение.
Я пишу прикладную программу, что-то вроде чата. Пересыла данных организуется по протоколу TCP (т.е. из компонентов – TServerSocket и TClientSocket), клиент вводит IP, присоединяется и все ok. Сначала мне казалось, что вводить IP удобно (у меня W2K и там при соединении пишут твой IP), а потом выяснилось, что в W98 ничего такого нет и подсоединиться, не зная IP, бедняга не сможет.
Да, я знаю, что есть куча суррогатных способов решить эту проблему, не модернизируя программу, но все это выглядит не элегантно.
Я искренне надеюсь, что кто сможет обьяснить хотя бы алгоритм, а там чего будет непонятно – я спрошу :)


dimmu2   (2002-06-24 14:40:00) [1]

ау?


dimmu2   (2002-06-21 17:54:00) [2]

я использовал TUdpSocket из палитры "Internet" а что?


GM_   (2002-06-19 10:34:00) [3]

Только обычно делают наоборот, не "Хеллоу! Я Сервер! Мой IP такой-то!!!", а "Хеллоу! Я Клиент! Есть кто сервер???" и без всяких "каждые ЭНдацть секунд"


Ghost.   (2002-06-19 09:58:00) [4]

А че за компонент ты взял?


dimmu2   (2002-06-18 16:47:00) [5]

спасиба за информацию только я тут пробую и что-то не получается ...

на стороне сервера, который рассылает позывные:

//соединение
UdpSocket1.RemoteHost:="255.255.255.255";
UdpSocket1.RemotePort:="1981"; //произвольное значение?
UdpSocket1.Connect;
//рассылка
BMessage:=ServerSock.Socket.LocalAddress;
DataLen:=Length(BMessage);
Data:=PChar(BMessage);
UdpSocket1.SendBuf(Data,DataLen,0);


на стороне клиента, который принимает позывные:

//открываем сокет
UdpSocket2.Open;
//рассылка
принимаем сообщение по событию OnReceive


и это пол беды - я смотрел что за адрес рассылается - после открытия ServerSock значение ServerSock.Socket.LocalAddress почему-то "0.0.0.0" ...


Malder   (2002-06-15 00:18:00) [6]

В смысле, что маска сети - это вовсе не адрес сети класса C с последним октетом 255...


Malder   (2002-06-15 00:10:00) [7]

, адрес 255.255.255.255 (хотя, некоторые UDP не дают посылать по такому адресу =\, поэтому используй маску сети в качестве адреса, т.е. последняя цифра - 255, например 192.168.1.255)
что за ахинея...


cypher   (2002-06-13 23:53:00) [8]

Ну в дельфях 6 вроде отказались от НетМастеровских NMUPD, а 6 дельфей у меня нет, что именно не скажу, но судя по названию - оно.
бродкаст это посылка пакета сразу всем, адрес 255.255.255.255 (хотя, некоторые UDP не дают посылать по такому адресу =\, поэтому используй маску сети в качестве адреса, т.е. последняя цифра - 255, например 192.168.1.255)


dimmu2   (2002-06-13 18:04:00) [9]

интересно ... а какой компонент? TUdpSocket? Или нет? И как делается броадкаст?
Я извиняюсь за невежество, но я ничего кроме TServer/ClientSocket не использовал раньше ... так что пожалуйста по-подробнее!


cypher   (2002-06-12 14:32:00) [10]

Ну дык эта.... используй UPD бродкаст, каждые ЭНдацть секунд посылай типа "Хеллоу! Я Сервер! Мой IP такой-то!!!", потом все кто ЮДП прослушивают отправляют ну например какой-то ключик, типа "А чем докажешь?!" =).... а он уже персонально каждому отвечает "Мамой клянусь!" =)))))

ну... =)))... я надеюсь идея ясна


Наверх

Титульная страница Поиск, карта сайта Написать письмо