Прежде всего, я хотел бы извиниться за плохой английский :) Вчера я закончил писать свою первую многопользовательскую игру (Pong) на C ++ с использованием Winsock и Allegro5. Игра состоит из одного сервера для всех игроков и клиентов.
Каждый кадр (FPS = 60) клиенты отправляют свои координаты mouse_y на сервер, который соответственно передает их клиентам своих оппонентов. Когда я играю в игру на своих 2 компьютерах, подключающихся к серверу, который работает на одном из них, по локальной сети он работает отлично, ракетка противника движется плавно. Но когда я делаю то же самое, подключаясь через свой внешний IP-адрес, ракетка противника отстает, что портит игру, потому что это клиент, который проверяет, попал ли мяч в ракетку соперника или нет. Таким образом, синхронизация нарушается, всякий раз, когда я перемещаю одну ракетку, чтобы отбить мяч на другом компьютере, она отстает и не успевает вовремя, в результате чего оппонент получает очко ... Но отстает не игра. Моя ракетка и мяч движутся плавно. Проблема только в весле соперника.
Я новичок в сетевом программировании, так как прочитал только Руководство Beej по сетевому программированию. Я использую сокеты TCP для отправки () и recv () координат лопастей и функцию select () для опроса сокетов на предмет данных.
Не имею ни малейшего представления, в чем может быть причина.
TL; DR: лепесток оппонента отстает, когда я подключаюсь через внешний IP-адрес, но этого не происходит, когда я подключаюсь через локальный IP-адрес.