| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Написать сетевой режим. |
| Автор: Yoda 12.1.2006, 12:56 |
| Ну собственно мне понадобилось написать игру на VCL типа "Бойцовского клуба" (Online проект www.combats.ru). На форме будут лежать: TClientSocket и TServerSocket (т.е. каждая копия игры сможет стать сервером, типа Counter-Strike). Работать сетевой режим должен примерно так: //Для удобства первая копия игры будет "alpha", а другая "beta". 1. alpha создает сервер, и сразу подключаецца к нему. 2. beta подключаецца к созданому ранее серверу. (Значит на сервере уже висит 2 клиента). 3. alpha посылает свои значения (хелсов, маны и т.д.) beta, а beta в свою очередь посылает свои значения alpha. 4. Ну еще в игре будет присутвовать кнопка по нажатию на которую, твоему аппаненту будут посылацца значения твоих блоков и ударов. Я не прошу написать за меня игру - просто подскажите как это правильно все сделать. ЗЫ Для меня осталось не понятным, как отправлять значения (хелсов, маны и т.д.) всем кроме меня... |
| Автор: Snowy 12.1.2006, 13:14 |
| Ты посылаешь серверу свои значения. Сервер их получает. Также он знает номер коннекта, с которого пришли данные. Сервер начинает перебирать все коннекты и отправлять данные всем, у кого номер коннекта не равен номеру, от которого получены данные. Все просто. Ну даже, если он и отправить тебе данные - хуже не станет P.S. Просьба писать на русском языке. |
| Автор: Yoda 12.1.2006, 13:25 | ||||||
А мне как узнать номер коннекта с которого пришли значения ?
Ну смотри - например я получю значения (имени персонажа, кол-во хелсов) и присвою их какому нибудь labelEnemyName:= GotName.... А это окажутся мои значения
Ок |
| Автор: Yoda 12.1.2006, 15:13 | ||
Можно поподробней |
| Автор: Snowy 12.1.2006, 17:03 |
| В OnExecute ты можешь получить TIdPeerThread.Connection. При отправке ты перибераешь все Connection и отправляешь данные всем, кто не есть этот. |
| Автор: Yoda 12.1.2006, 19:38 |
| Я говорю о закладке Internet, компонентах: ServerSocket1, ClientSocket1... OnExecute там не нашел P.S. Юзать желательно их.. |
| Автор: F1reF0x 13.1.2006, 14:42 |
| IdTCPClient IdTCPServer как альтернатива, кстати там есть onExecute |
| Автор: Yoda 13.1.2006, 15:20 |
| Ты вопрос видел ? Как осуществить сетевой режим с использованием : ServerSocket1, ClientSocket1... Не ужели никто не знает ?! |
| Автор: _hunter 13.1.2006, 16:10 |
| что значит "как осуществить"? как с этимим компонентами работать? так книги цитировать тут вряд ли кто-то будет... поищи по форуму, по сети... |
| Автор: F1reF0x 13.1.2006, 17:35 |
| Yoda Там всё просто. посмотри в хелпе какая процедура отвечает за отправку данных у клиента, и как принимать данные, больш тут почти ничего и не требуется (хост и порт ещё понятно). |
| Автор: Yoda 13.1.2006, 18:17 |
| У меня вопрос пока такой...У меня к серверу будет подключено несколько клиентов... Вот вопрос как отправить значения(хелсов, маны) всем клиену(ам) кроме того, который прислал эти значения. |
| Автор: _hunter 13.1.2006, 18:50 |
| при подключении нового клиента заноси его в какой-нить список и потом отправляй значения всем, кто есть в этом списке |
| Автор: Yoda 13.1.2006, 19:07 |
| ....Допустим есть 2 клиента...1 из клинетов шлет на сервер значения (все таже мана и хелсы). Сервер их получает.... Как отослать эти значения ТОЛЬКО другому клиенту? |
| Автор: _hunter 13.1.2006, 19:25 |
| что значит "ТОЛЬКО другому"? слать точно так же как и ТОЛЬКО этому, но другому... P.S. таки почитай книгу... |
| Автор: Yoda 13.1.2006, 19:33 |
| for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do ServerSocket1.Socket.Connections[i].SendText('#HP'); //Это всем ...2 Клиента (alpha, beta). Клиент alpha послал серверу ('#HP'). Как серверу послать ('#HP') beta? |
| Автор: _hunter 13.1.2006, 19:44 |
| ну а ServerSocket1.Socket.Connections[1].SendText('#HP'); -- только второму |
| Автор: Yoda 13.1.2006, 23:48 |
| Ну подклюцатьтся может сначала бета потом альфа.....Это же от юзверя завист...И вообще их может быть многа.... Может сервак вычислить с какого Connections пришли значения ? |
| Автор: _hunter 16.1.2006, 12:38 |
| может. для этого и придумали событие OnClientConnect |