Вот игра есть сетевая, суть такая 2 танка едут навстречу друг другу с разной скоростью, кто первый попадёт в противника - победил или столкнутся. Примитивная Но не синхронизируются сервер и клиент. Выдаёт asynchronys socket error Никак не могу поймать ошибку Может что с компонентами напутал?
Unconnected
26.05.2009 15:12
Ну так там в диалоге подключения к серверу на обработчике кнопки "принять" вообще ничего не висит... ошибка, которая у тебя вываливается, просто означает что не удалось подключиться, а всё потому, что в свойствах TServerSocket ты не ввёл порт, на котором он будет слушать, а в свойствах TClientSocket тоже не ввёл порт и к тому же адрес, по которому располагается сервер.
cooler
27.05.2009 2:19
Что-то я совсем запутался, теперь не могу привязать к той кнопке процедуры с параметрами, всё не то Что там нужно прописать? Помогите, пожалуйста подключить. И в свойствах не знаю что прописывать, т.к смотрел в похожи программах всё также стоит и работает, нужно ли?
Unconnected
28.05.2009 0:03
Ну, если будешь удалённо подключаться, т.е. по IP-адресу, то для клиентского сокета будет так:
clientsocket1.port:=1001; clientsocket1.address:='77.33.44.22'; {Это IP-адрес машины, на которой запущен сервер} clientsocket1.open;
При подключении серверная часть должна быть запущена, и в её свойствах должен быть установлен порт, на который будет подключаться клиент, в данном случае 1001. Ещё не рекомендуется ставить значение порта меньше 1000, т.к. они якобы используются системой..
cooler
28.05.2009 0:38
Т.е также open сервер и порт прописываем сначала, а тот ip-адрес можно брать из диалогового окна, которое у меня было?
Unconnected
28.05.2009 0:41
Даже нужно. И ещё советую почитать про асинхронные сокеты в дельфи.
cooler
28.05.2009 1:25
Попробую соединиться
cooler
28.05.2009 13:23
Опять не работает Выдает ещё ошибку с памятью почему-то и ту же асинхронную
Вот на кнопку клиент:
Код
procedure TForm1.N3Click(Sender: TObject); begin if Form2.ShowModal=mrOk then begin initgame; state:=1; client.port:=1001; Client.Host:=Form2.Edit1.Text;
initgame; state:=0; server.port:=1001; Server.Open; if server.Active then StatusBar1.SimpleText:='Ожидание'; btnClient.Enabled:=False; btnServer.Enabled:=False; lblIsServer.Caption:='Сервер'; lblLeftT.Enabled:=True; end;
Unconnected
28.05.2009 14:28
Client.Host - почему не client.address? Ты вообще как тестируешь - по интернету, по локальной сети или на своей машине?
cooler
28.05.2009 19:39
Да client.address тоже пробовал По идее на одной машине должно работать, если даже айпишник не вводить
Unconnected
28.05.2009 20:55
Это по какой-такой идее?)) Вводить надо, сокет тебе не телепат, чтобы догадываться, куда подключаться) Чтобы подключиться к своей машине, можешь свойству address клиентского сокета присвоить 127.0.0.1 или свойству host того же сокета значение localhost или имя твоего компьютера.
Я это имел ввиду Оно по умолчанию у меня такое, но всё равно даже на одном компьютере не связывается
Unconnected
28.05.2009 21:06
А брандмауэр Windows выключен? Или может ещё какой установлен?
cooler
28.05.2009 21:24
выключен, таскал на другие компы и по сети и на одном компе не работает
Unconnected
28.05.2009 22:12
Прикрепи сюда проект.
cooler
29.05.2009 5:41
Вот
Unconnected
30.05.2009 0:54
Действительно была ошибка, acsess violation, насколько я понял, происходила после обращения к свойствам компонентов client и server (ты их переименовал). Попробовал удалить их с формы и добавить заново, переписал код под новые названия - заработало, даже поиграть удалось Вот что получилось:
cooler
30.05.2009 15:44
У меня всё-равно не работает. Точнее клиент-сервер не синхронизируются А ты как запускал, в какой последовательности?
Unconnected
30.05.2009 17:02
Открывал 3(три) копии программы, на одной запускал сервер, на двух других - клиенты...
cooler
30.05.2009 21:17
И ездят и стреляют синхронно? Странно
Unconnected
30.05.2009 23:54
Едут навстречу друг другу, правда один быстрее, один медленнее, ну и стреляют по нажатию)
cooler
31.05.2009 16:04
Что за сообщение? Разная скорость и должна быть, только у меня в каждом окне разные игры, а не по сети - не синхронизируется ничего. Не пойму в чём дело.
Unconnected
31.05.2009 17:45
Цитата
Разная скорость и должна быть, только у меня в каждом окне разные игры, а не по сети - не синхронизируется ничего. Не пойму в чём дело.
Ниччего не понял, в каких таких разных окнах, и что ты подразумеваешь под "синхронизацией"?
cooler
31.05.2009 19:59
Ты на одном компе тестировал? Ну так в разных окна запускаешь - в одном сервер, в другом клиент Так если я левым танком в окне сервер стреляю, то в окне клиент эта пуля должна лететь Т.е всё что делает один пользователь также отображается у другого, не знаю как ещё объяснить, сетевая игра
cooler
1.06.2009 0:19
Так что?
Unconnected
1.06.2009 0:27
Можно сказать, я ввёл тебя в заблуждение, сказав, что работает.. Подключиться-то удалось, но "играл" я действительно в одной копии программы, во второй всё это не отображалось. Сейчас попробую разобраться, почему так
cooler
1.06.2009 0:32
Спасибо, если можно то лучше сегодня. Т.к завтра уже нужна
Unconnected
1.06.2009 0:43
Вот, посмотри, перевешал все события со старых названий сокетов на новые - вроде работает.
Добавлено через 4 мин. Только глючит она всё равно сильно, на сервере почему-то стрелять можно, а пушка не двигается...
cooler
1.06.2009 1:04
Архив повреждён И пушка нужно чтобы двигалась
Unconnected
1.06.2009 1:28
Как повреждён, всё норм открывается, не докачал наверное... Про пушку - посмотрю. Кстати, ты сам игру эту писал?
Добавлено через 16 мин. Пушки двигаются...Более-менее... Глючит всё-равно.
cooler
1.06.2009 1:59
Спасибо, только теперь двигаются с одинаковой скоростью и косячит при попадании - в одном продолжают двигаться. Прогу писал частично сам: взял движок и лепил из него что нужно
Unconnected
1.06.2009 2:10
Скорость - это я поменял, чтобы легче тестировать было, чтобы поставить такую, какая была, поставь значение timer4.interval=50, timer6.interval=100, вроде так было..
cooler
1.06.2009 2:16
Да, а как ты делал чтобы синхронизировалось хоть немного? Переименовал что осталось? Теперь просто пули клиента не видны в окне сервера
Unconnected
1.06.2009 3:00
Да, переименовал. Хотя можно было и не переименовывать, а просто вызвать конструкторы TServerSocket'а и TClientSocket'а, чего ты в самом начале не сделал, из-за этого и были ошибки. Про пули - ты, кажется, "движок" свой криво скопировал..
cooler
1.06.2009 4:27
Помогите отловить хотя бы этот косяк
cooler
3.06.2009 23:18
Помогите пожалуйста доделать хотя бы чтобы пули клиента отображались в окне сервера, срочно нужно
Unconnected
4.06.2009 1:00
Вроде бы нашёл ошибку, по всей видимости где-то портилось значение isConnect... Закомментировал кое-где проверку на подключение, теперь всё работает, советую детальнее изучить, а заодно и отформатировать код.
cooler
4.06.2009 1:41
Спасибо большое, там ещё проблема с синхронностью небольшая когда нажимается кнопка, все танкаи стартуют кроме правого в окне клиента и сбивается поэтому
Unconnected
4.06.2009 18:19
Попробуй сделать по аналогии, я ж говорю, там где-то IsConnect портится, значит, одна из программ не отправляет вовремя то, что нужно... Либо ищи, где портится, либо, что легче, закомментируй все условия "If isconnect".
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.