| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Морской бой |
| Автор: IRQ 7.5.2006, 15:16 |
| Мне надо написать морской бой. Желательно с поддержкой игры по сети. Необходимо использовать потоки и синхронизацию. Подскажите, какие компоненты нужно использовать для подобного рода программ и как использовать потоки в данном случае. 2 игрока. Я не вижу прямо таких напрашивающихся решеений по использованию потоков. |
| Автор: IRQ 7.5.2006, 16:22 |
| Ну про потоки-как раз возможно при работе в сети. Но я всё равно не очень понимаю, как именно использовать. А компоненты я имел ввиду для работы в сети. Что надо? TTcpClient/TTcpServer? Где-то видел про Indy. Или может TClient Socket/TServerSocket. Но этих компонентов я почему-то не нашёл в палитре компонентов Delphi 7. Только если руками прописывать. В BCB 6 эти компоненты есть. |
| Автор: Тьма 7.5.2006, 16:46 |
| использовать потоки имеет смысл, если так стоит задание....... |
| Автор: Poseidon 7.5.2006, 17:58 | ||||
Вот как раз TClientSocket и TServerSocket подойдет |
| Автор: IRQ 7.5.2006, 18:30 |
| Спасибо за информацию о добавлении компонентов |
| Автор: Poseidon 7.5.2006, 18:35 |
| Зашить в отдельный поток только передачу по сети информацию о ходе. |
| Автор: IRQ 8.5.2006, 14:39 |
| А не подскажите, как юзать ClientSocket/ServerSocket. Я пробовал. Вроде всё соединятеся, но сообщения не отсылаются. |
| Автор: Poseidon 8.5.2006, 15:33 | ||
| Главное, не забывать, что сторона, каторая посылает - это ClientSocket, а сторона, каторая принимает - это ServerSocket. Т.е. в программе должен быть и ServerSocket (для приема) и ClientSocket (для посылки). Вот пример посылки текста (всю информацию о ходе можно запихнуть в текстовую переменную.
|
| Автор: IRQ 9.5.2006, 01:27 |
| А. Теперь понятно. Просто я пытался юзать TServerSocket.ReceiveText. Но там этого не было |
| Автор: Poseidon 9.5.2006, 01:46 |
| Я уже писал, запихни все работу с сетью в поток, что бы на случай сетевых глюков прога не зависала. Т.е. коннект и передачу сообщения лучше в поток. Так же не мешало бы прикрутить ответ на сообщения. Что-то вроди "сообщение получено". Так во многих сетевых чатах сделано и даже в ICQ-клиентах. |
| Автор: Mechanic 9.5.2006, 21:48 |
| В потоках можно сделать анимацию моря, колец от взрывов, мониторинг сети (юзер ушел, пришел), чат между игроками. А если использовать Indy, так тот синхронный по определению, тут как раз без потоков не обойтись. Например, сидит такой Indy сокет в потоке, и просто ждет очередного пакета, а по приему бросает сообщение в основное окно об очередном событии, а то уж пущай реагирует. (Свой "Морской бой" делал на TClientSocket, TServerSocket) |
| Автор: IRQ 16.5.2006, 18:30 |
| Появилось ещё несколько вопросов. 1)Использование TClientSocket/TServerSocket упрошает и формализует работу по сети? Можно было бы использовать TTcpClient/TTcpServer? Или нет смысла. Достатчно первых. 2)Потоки. Я так подумал. На каждого игрока создаётся поток. И может получиться так, что игра идёт, а к серверу (тот, кто создал игру) начинает подключаться кто-то ещё. Игра втроём получается. Здесь видимо тоже надо использовать синхронизацию? Расскажите про эту штуку пожалуйста. Про всякие там синхронизации, приостановки потоков. |
| Автор: Poseidon 16.5.2006, 18:54 | ||||
Один топик - один вопрос!
|
| Автор: VJVS 19.5.2006, 09:27 |
| Poseidon, как мне поставить TClientSocket/TServerSocket в Delphi7, я никак не могу найти! |
| Автор: Romikgy 19.5.2006, 09:51 |
| VJVS, DRKB почитай там есть |
| Автор: Poseidon 20.5.2006, 11:52 | ||
http://forum.vingrad.ru/index.php?showtopic=95023&view=findpost&p=724079 |
| Автор: IRQ 21.5.2006, 18:40 |
| Возник ещё один вопрос. Я смог отправить сообщение от клиента к серверу. А как отправить от сервера к клиенту? Возможно ли это? Я писал Server1.Socket.SendText('123') и получал ошибку. |
| Автор: Sunr1se 21.5.2006, 19:06 | ||
|
| Автор: IRQ 21.5.2006, 19:33 |
| Точно. Что-то я не прочитал про свойство Connections. Дальше Socket не пошёл |
| Автор: JaspeR 8.6.2007, 12:12 |
| Подскажите, в чем проблема??? см рисунок |
| Автор: Sanchezzz 10.6.2007, 01:06 |
| JaspeR ты две проги запустил?... или порт занет... найди лутше дему CustomWinSocket |