![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Venom |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Задали написать сетевую игрушку "ножницы-бумага-камень", а я до этого сетевые проги вообще не писал, поэтому не пинайте сильно если что не так сделал
![]() У меня сделано так, что как только к серверу подключился клиент активным становится у сервера и у клиента только RadioGroup, а кнопка "Ход" остается затемненной. А мне надо еще чтобы как только сервер или клиент выбрали один из вариантов в RadioGroup , то RadioGroup сразу становится неактивным. Кнопка "Ход" должна стать активной у обоих только тогда, когда и сервер и клиент выберут свои варианты, а как это сделать я без понятия. PS: Программа запускается либо как сервер, либо как клиент, который должен подключиться к серверу. Поиск сервера происходит с помощью UDP протокола. Для того, чтобы поиграть на одном компе, нужно запусти программу два раза, в одной выбрать сервер, в другой клиент и ввести в поле ввода IP адреса 127.0.0.1 у клиента и нажать "старт игры". Сообщение отредактировано: Venom - 25.12.2009 17:32 Прикрепленные файлы ![]() |
Unconnected |
![]()
Сообщение
#2
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
А можно узнать, зачем используются все эти UPD компоненты?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
UPD используются для локальной сети, для того чтобы клиент, незная IP сервера, мог обнаружить и подключиться к серверу.
|
andriano |
![]()
Сообщение
#4
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
PS: Программа запускается либо как сервер, либо как клиент, который должен подключиться к серверу. Поиск сервера происходит с помощью UDP протокола. Для того, чтобы поиграть на одном компе, нужно запусти программу два раза, в одной выбрать сервер, в другой клиент и ввести в поле ввода IP адреса 127.0.0.1 у клиента и нажать "старт игры". Вообще-то существует способ определения, в каком режиме работать программе: клиента или сервера, без лишних вопросов пользователю.Для этого программа посылает широковещательный запрос и ждет. Ждать может долго. Дождалась и приняла пакет. Она на этом этапе должна реагировать на 2 типа пакетов: "запрос сервера" и "ответ сервера". Если получен пакет "ответ сервера", то программа понимает, что она - клиент. Если получен пакет "запрос сервера", программа объявляет себя сервером и отсылает обратно пакет "ответ сервера". |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Venom, а у тебя работает этот автоматический поиск сервера? У меня, на D2007, не работает (тестирую на одном, своём компьютере, а ведь он по идее должен и на одном обнаруживать).
Если тебе нужно автоматическое нахождение сервера, то это можно сделать средствами только TClientSocket\TServerSocket. Посмотри здесь, я там выкладывал пример сетевой игры с широковещанием на вышеупомянутых компонентах. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
![]()
Сообщение
#6
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
|
Venom |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Unconnected, у меня на одном компе не работает. Скачал спички из соседней темы и они тоже не могут сервер на одном моем компе найти.
А все-таки можно мой способ реализовать с активными и неактивными компонентами или лучше все переделать, а переделывать я пока незнаю как? |
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Скачал спички из соседней темы и они тоже не могут сервер на одном моем компе найти. А у меня находят замечательно, как думаешь, в чем проблема? Добавлено через 1 мин. Надеюсь, ты сначала запускаешь программу, выбираешь сервер, потом запускаешь ещё одну копию этой программы и выбираешь клиент... -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Незнаю в чем проблема.
Когда у меня комп соединен с инетом, то просто ничего не находится, когда отключаю инет и запускаю два окна проги, в одном сервер, в другом клиент, у меня начинают вылазить ошибки Socket Error 10065, вроде это означает невозможность установления связи с сервером. |
Unconnected |
![]()
Сообщение
#10
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Смотри прикреплённый скриншот. Могу ещё видео снять.
Может, дело в каких-то твоих особо жестоких брандмауэрах\антивирусах? PS: то, что замазано серым - мой IP. Сообщение отредактировано: Unconnected - 25.12.2009 22:56 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Unconnected, у тебя компьютер, случайно, не подсоединен к какой-нибудь локальной сети? Потому что сегодня проверял на компе который соединен с локалкой, там udp отлично находит сервак даже когда игра запущена на одной машине, а на автономной машине не прокатывает. У знакомого, который пишет аналогичную игрушку, также.
|
Unconnected |
![]()
Сообщение
#12
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Ни к какой не подсоединён. Я тебе говорю про широковещание на сокетах на любом компьютере, а ты мне про UPD только в локалке...
Кстати, слабо представляю, как такое может быть, чтобы на одиночном компьютере не находило, а вот именно в локальной сети - находило. PS: не увидел сразу пост andriano. Цитата Если тебе нужно автоматическое нахождение сервера, то это можно сделать средствами только TClientSocket\TServerSocket. Не "только", а "в частности". Я имел в виду "только лишь средствами...", т.е. можно сделать без UDP. Сообщение отредактировано: Unconnected - 26.12.2009 12:31 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
![]()
Сообщение
#13
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Unconnected, ты имеешь в виду протокол UDP или что-то другое?
Если его, то я, например, использовал его с помощью лишь WinAPI без всяких TClientSocket\TServerSocket. |
Unconnected |
![]()
Сообщение
#14
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Unconnected, ты имеешь в виду протокол UDP или что-то другое? Я имел в виду, что можно обойтись без классов, реализующих работу с UDP; используя лишь TClientSocket\TServerSocket, которые, насколько помню, работают с TCP\IP. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Вроде работает как надо.
Unconnected, можешь проверить широковещание, а то у меня оно так и не работает даже когда все антивирусы и фаерволы отключаю. Незнаю в чем причина. Осталось только доделать чтобы нельзя было запускать на одном компе два сервера и два клиента. Сделал обработку на два сервера аналогично как в спичках, но мне все равно вылазит окно с ошибкой от винды, а не мое showmessage. Помогите решить проблему... PS: кажется до этого выложил неработающий вариант) Сообщение отредактировано: Venom - 26.12.2009 17:23 Прикрепленные файлы ![]() |
Unconnected |
![]()
Сообщение
#16
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Вроде работает как надо. Что работает как надо? Кстати, я, кажется, поспешил и ошибся, сказав, что широковещание можно сделать с помощью TClient/ServerSocket. Сейчас посмотрел протокол UDP, посмотрел Спички, там всё на UDP сделано. Сейчас постараюсь разобраться, как сделать с дейтаграммами. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#17
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Сделал что два сервера нельзя запустить на одном компе, но все еще можно запустить 2 клиента.
Помогите сделать чтобы не запускались два клиента на одной машине и прога будет полностью готова ![]() Это код, где описывается, что можно запускать только один сервер. Пытался аналогично сделать для клиента, но почему-то не срабатывает ![]() procedure TNewGame.Button1Click(Sender: TObject); |
Unconnected |
![]()
Сообщение
#18
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Ну попробуй взять в try\except второй кусок кода, где клиентские сокеты открываются. Попробуй с помощью трассировки выявить, на какой именно строке ошибка.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Venom |
![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 30 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Пробовал так сделать, там ошибки ни какой не появляется, вторая программа-клиент сообщает, что успешно соединена с сервером и все. Поэтому я незнаю что сделать.
|
Unconnected |
![]()
Сообщение
#20
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Давай сначала определимся. Ты сказал, что
Цитата но все еще можно запустить 2 клиента. Каких именно клиента? В UDP не знаю, а в TClientSocket если попытаться открыть сокет на порту(порте? ![]()
Вообще, у твоей программы немного странная логика. Я бы советовал сделать всё по образу и подобию спичек. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 10.07.2025 18:40 |