![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
пресловутое окно активных игр [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 такой-то!!!", потом все кто ЮДП прослушивают отправляют ну например какой-то ключик, типа "А чем докажешь?!" =).... а он уже персонально каждому отвечает "Мамой клянусь!" =)))))
ну... =)))... я надеюсь идея ясна