Помощь - Поиск - Пользователи - Календарь
Полная версия: Нужна помощь в настройке (?) socketа
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
cooler
Вот игра есть сетевая, суть такая
2 танка едут навстречу друг другу с разной скоростью, кто первый попадёт в противника - победил или столкнутся.
Примитивная
Но не синхронизируются сервер и клиент. Выдаёт asynchronys socket error
Никак не могу поймать ошибку smile.gif
Может что с компонентами напутал?
Unconnected
Ну так там в диалоге подключения к серверу на обработчике кнопки "принять" вообще ничего не висит... ошибка, которая у тебя вываливается, просто означает что не удалось подключиться, а всё потому, что в свойствах TServerSocket ты не ввёл порт, на котором он будет слушать, а в свойствах TClientSocket тоже не ввёл порт и к тому же адрес, по которому располагается сервер.
cooler
Что-то я совсем запутался, теперь не могу привязать к той кнопке процедуры с параметрами, всё не то
Что там нужно прописать? Помогите, пожалуйста подключить.
И в свойствах не знаю что прописывать, т.к смотрел в похожи программах всё также стоит и работает, нужно ли?
Unconnected
Ну, если будешь удалённо подключаться, т.е. по IP-адресу, то для клиентского сокета будет так:

clientsocket1.port:=1001;
clientsocket1.address:='77.33.44.22'; {Это IP-адрес машины, на которой запущен сервер}
clientsocket1.open;



При подключении серверная часть должна быть запущена, и в её свойствах должен быть установлен порт, на который будет подключаться клиент, в данном случае 1001. Ещё не рекомендуется ставить значение порта меньше 1000, т.к. они якобы используются системой..
cooler
Т.е также open сервер и порт прописываем сначала, а тот ip-адрес можно брать из диалогового окна, которое у меня было?
Unconnected
Даже нужно. И ещё советую почитать про асинхронные сокеты в дельфи.
cooler
Попробую соединиться smile.gif
cooler
Опять не работает
Выдает ещё ошибку с памятью почему-то и ту же асинхронную

Вот на кнопку клиент:
Код
procedure TForm1.N3Click(Sender: TObject);
begin
     if Form2.ShowModal=mrOk then begin
        initgame;
        state:=1;
        client.port:=1001;
        Client.Host:=Form2.Edit1.Text;

        Client.Open;
        StatusBar1.SimpleText:='Связь установлена';
        btnClient.Enabled:=False;
        btnServer.Enabled:=False;
        lblIsServer.Caption:='Клиент';
        lblRightT.Enabled:=True;
     end;
end;



Вот на кнопку принять в клиенте :
Код

ModalResult:=mrOK;


А вот на сервер кнопку:

Код
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
Client.Host - почему не client.address? Ты вообще как тестируешь - по интернету, по локальной сети или на своей машине?
cooler
Да client.address тоже пробовал
По идее на одной машине должно работать, если даже айпишник не вводить
Unconnected
Это по какой-такой идее?))
Вводить надо, сокет тебе не телепат, чтобы догадываться, куда подключаться) Чтобы подключиться к своей машине, можешь свойству address клиентского сокета присвоить 127.0.0.1 или свойству host того же сокета значение localhost или имя твоего компьютера.
cooler
Цитата
свойству address клиентского сокета присвоить 127.0.0.1

Я это имел ввиду smile.gif
Оно по умолчанию у меня такое, но всё равно даже на одном компьютере не связывается
Unconnected
А брандмауэр Windows выключен? Или может ещё какой установлен?
cooler
выключен, таскал на другие компы и по сети и на одном компе не работает sad.gif
Unconnected
Прикрепи сюда проект.
cooler
Вот
Unconnected
Действительно была ошибка, acsess violation, насколько я понял, происходила после обращения к свойствам компонентов client и server (ты их переименовал). Попробовал удалить их с формы и добавить заново, переписал код под новые названия - заработало, даже поиграть удалось smile.gif
Вот что получилось:
cooler
У меня всё-равно не работает. Точнее клиент-сервер не синхронизируются
А ты как запускал, в какой последовательности?
Unconnected
Открывал 3(три) копии программы, на одной запускал сервер, на двух других - клиенты...
cooler
И ездят и стреляют синхронно? Странно
Unconnected
Едут навстречу друг другу, правда один быстрее, один медленнее, ну и стреляют по нажатию)
cooler
Что за сообщение? blink.gif
Разная скорость и должна быть, только у меня в каждом окне разные игры, а не по сети - не синхронизируется ничего. Не пойму в чём дело.
Unconnected
Цитата

Разная скорость и должна быть, только у меня в каждом окне разные игры, а не по сети - не синхронизируется ничего. Не пойму в чём дело.


Ниччего не понял, в каких таких разных окнах, и что ты подразумеваешь под "синхронизацией"?
cooler
Ты на одном компе тестировал?
Ну так в разных окна запускаешь - в одном сервер, в другом клиент
Так если я левым танком в окне сервер стреляю, то в окне клиент эта пуля должна лететь smile.gif
Т.е всё что делает один пользователь также отображается у другого, не знаю как ещё объяснить, сетевая игра
cooler
Так что?
Unconnected
Можно сказать, я ввёл тебя в заблуждение, сказав, что работает.. Подключиться-то удалось, но "играл" я действительно в одной копии программы, во второй всё это не отображалось. Сейчас попробую разобраться, почему так blink.gif
cooler
Спасибо, если можно то лучше сегодня. Т.к завтра уже нужна
Unconnected
Вот, посмотри, перевешал все события со старых названий сокетов на новые - вроде работает.

Добавлено через 4 мин.
Только глючит она всё равно сильно, на сервере почему-то стрелять можно, а пушка не двигается...
cooler
Архив повреждён
И пушка нужно чтобы двигалась
Unconnected
Как повреждён, всё норм открывается, не докачал наверное...
Про пушку - посмотрю. Кстати, ты сам игру эту писал?


Добавлено через 16 мин.
Пушки двигаются...Более-менее... Глючит всё-равно.
cooler
Спасибо, только теперь двигаются с одинаковой скоростью и косячит при попадании - в одном продолжают двигаться.
Прогу писал частично сам: взял движок и лепил из него что нужно
Unconnected
Скорость - это я поменял, чтобы легче тестировать было, чтобы поставить такую, какая была, поставь значение timer4.interval=50, timer6.interval=100, вроде так было..
cooler
Да, а как ты делал чтобы синхронизировалось хоть немного?
Переименовал что осталось?
Теперь просто пули клиента не видны в окне сервера
Unconnected
Да, переименовал. Хотя можно было и не переименовывать, а просто вызвать конструкторы TServerSocket'а и TClientSocket'а, чего ты в самом начале не сделал, из-за этого и были ошибки. Про пули - ты, кажется, "движок" свой криво скопировал..
cooler
Помогите отловить хотя бы этот косяк
cooler
Помогите пожалуйста доделать хотя бы чтобы пули клиента отображались в окне сервера, срочно нужно
Unconnected
Вроде бы нашёл ошибку, по всей видимости где-то портилось значение isConnect... Закомментировал кое-где проверку на подключение, теперь всё работает, советую детальнее изучить, а заодно и отформатировать код.
cooler
Спасибо большое, там ещё проблема с синхронностью небольшая
когда нажимается кнопка, все танкаи стартуют кроме правого в окне клиента и сбивается поэтому
Unconnected
Попробуй сделать по аналогии, я ж говорю, там где-то IsConnect портится, значит, одна из программ не отправляет вовремя то, что нужно... Либо ищи, где портится, либо, что легче, закомментируй все условия "If isconnect".
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.