Вот игра есть сетевая, суть такая
2 танка едут навстречу друг другу с разной скоростью, кто первый попадёт в противника - победил или столкнутся.
Примитивная
Но не синхронизируются сервер и клиент. Выдаёт asynchronys socket error
Никак не могу поймать ошибку
Может что с компонентами напутал?
Прикрепленные файлы
Танки.rar ( 20.8 килобайт )
Кол-во скачиваний: 174
Ну так там в диалоге подключения к серверу на обработчике кнопки "принять" вообще ничего не висит... ошибка, которая у тебя вываливается, просто означает что не удалось подключиться, а всё потому, что в свойствах TServerSocket ты не ввёл порт, на котором он будет слушать, а в свойствах TClientSocket тоже не ввёл порт и к тому же адрес, по которому располагается сервер.
Что-то я совсем запутался, теперь не могу привязать к той кнопке процедуры с параметрами, всё не то
Что там нужно прописать? Помогите, пожалуйста подключить.
И в свойствах не знаю что прописывать, т.к смотрел в похожи программах всё также стоит и работает, нужно ли?
Ну, если будешь удалённо подключаться, т.е. по IP-адресу, то для клиентского сокета будет так:
clientsocket1.port:=1001;
clientsocket1.address:='77.33.44.22'; {Это IP-адрес машины, на которой запущен сервер}
clientsocket1.open;
Т.е также open сервер и порт прописываем сначала, а тот ip-адрес можно брать из диалогового окна, которое у меня было?
Даже нужно. И ещё советую почитать про асинхронные сокеты в дельфи.
Попробую соединиться
Опять не работает
Выдает ещё ошибку с памятью почему-то и ту же асинхронную
Вот на кнопку клиент:
Client.Host - почему не client.address? Ты вообще как тестируешь - по интернету, по локальной сети или на своей машине?
Да client.address тоже пробовал
По идее на одной машине должно работать, если даже айпишник не вводить
Это по какой-такой идее?))
Вводить надо, сокет тебе не телепат, чтобы догадываться, куда подключаться) Чтобы подключиться к своей машине, можешь свойству address клиентского сокета присвоить 127.0.0.1 или свойству host того же сокета значение localhost или имя твоего компьютера.
А брандмауэр Windows выключен? Или может ещё какой установлен?
выключен, таскал на другие компы и по сети и на одном компе не работает
Прикрепи сюда проект.
Вот
Прикрепленные файлы
Готова.rar ( 9.76 килобайт )
Кол-во скачиваний: 174
Действительно была ошибка, acsess violation, насколько я понял, происходила после обращения к свойствам компонентов client и server (ты их переименовал). Попробовал удалить их с формы и добавить заново, переписал код под новые названия - заработало, даже поиграть удалось
Вот что получилось:
У меня всё-равно не работает. Точнее клиент-сервер не синхронизируются
А ты как запускал, в какой последовательности?
Открывал 3(три) копии программы, на одной запускал сервер, на двух других - клиенты...
И ездят и стреляют синхронно? Странно
Едут навстречу друг другу, правда один быстрее, один медленнее, ну и стреляют по нажатию)
Что за сообщение?
Разная скорость и должна быть, только у меня в каждом окне разные игры, а не по сети - не синхронизируется ничего. Не пойму в чём дело.
Ты на одном компе тестировал?
Ну так в разных окна запускаешь - в одном сервер, в другом клиент
Так если я левым танком в окне сервер стреляю, то в окне клиент эта пуля должна лететь
Т.е всё что делает один пользователь также отображается у другого, не знаю как ещё объяснить, сетевая игра
Так что?
Можно сказать, я ввёл тебя в заблуждение, сказав, что работает.. Подключиться-то удалось, но "играл" я действительно в одной копии программы, во второй всё это не отображалось. Сейчас попробую разобраться, почему так
Спасибо, если можно то лучше сегодня. Т.к завтра уже нужна
Вот, посмотри, перевешал все события со старых названий сокетов на новые - вроде работает.
Добавлено через 4 мин.
Только глючит она всё равно сильно, на сервере почему-то стрелять можно, а пушка не двигается...
Архив повреждён
И пушка нужно чтобы двигалась
Как повреждён, всё норм открывается, не докачал наверное...
Про пушку - посмотрю. Кстати, ты сам игру эту писал?
Добавлено через 16 мин.
Пушки двигаются...Более-менее... Глючит всё-равно.
Спасибо, только теперь двигаются с одинаковой скоростью и косячит при попадании - в одном продолжают двигаться.
Прогу писал частично сам: взял движок и лепил из него что нужно
Скорость - это я поменял, чтобы легче тестировать было, чтобы поставить такую, какая была, поставь значение timer4.interval=50, timer6.interval=100, вроде так было..
Да, а как ты делал чтобы синхронизировалось хоть немного?
Переименовал что осталось?
Теперь просто пули клиента не видны в окне сервера
Да, переименовал. Хотя можно было и не переименовывать, а просто вызвать конструкторы TServerSocket'а и TClientSocket'а, чего ты в самом начале не сделал, из-за этого и были ошибки. Про пули - ты, кажется, "движок" свой криво скопировал..
Помогите отловить хотя бы этот косяк
Помогите пожалуйста доделать хотя бы чтобы пули клиента отображались в окне сервера, срочно нужно
Вроде бы нашёл ошибку, по всей видимости где-то портилось значение isConnect... Закомментировал кое-где проверку на подключение, теперь всё работает, советую детальнее изучить, а заодно и отформатировать код.
Спасибо большое, там ещё проблема с синхронностью небольшая
когда нажимается кнопка, все танкаи стартуют кроме правого в окне клиента и сбивается поэтому
Попробуй сделать по аналогии, я ж говорю, там где-то IsConnect портится, значит, одна из программ не отправляет вовремя то, что нужно... Либо ищи, где портится, либо, что легче, закомментируй все условия "If isconnect".