Мы работаем над RTS-игрой с использованием XNA, и мне поручено работать с сетью (ну, мы вроде как закончили игру, и я недавно поднял ее).Если говорить о погоне, у меня было множество проблем с сокетами, пропуская пакеты в основном по разным причинам, но я думаю, что я решил большинство из них.(Мы используем TCP даже ..)
Чтобы попытаться решить проблемы, я создал сетевой тестер, который будет отправлять пакеты на сервер, который будет отправлять их обратно, после чего я могу увидеть,были отброшены пакеты и т. д.
Один из моих тестов - это тест «деформация».Обычно я беру случайную функцию, генерирую число, преобразовываю его в строку MD5 и отправляю на сервер.Когда я получаю его обратно, я сравниваю его с уже отправленными строками и вижу, было ли какое-либо повреждение (сравнение должно быть 100%, как, например, все отправленные строки были найдены в полученном списке).
Вот снимок результатов:
Отправлено:
[0] "69-AB-DA-CC-1A-66-6A-27-C5-B4-FF-B7-2D-9F-75-06" string
[1] "1C-16-68-98-DF-6C-C9-16-54-5A-94-00-CA-57-77-CC" string
[2] "B6-24-7E-79-0C-66-14-5B-C0-32-F5-17-06-5D-13-87" string
[3] "1E-99-DE-1F-25-30-6E-DF-59-0D-05-2B-43-8F-07-16" string
[4] "76-82-30-13-C2-B4-33-7D-32-E2-04-C7-13-3C-F3-AB" string
[5] "23-BF-A2-F4-E4-77-78-6B-A5-2C-D2-6B-6F-B3-6F-44" string
Получено:
[0] "&\0\069-AB-DA-CC-1A-66-6A-27-C5-B4-FF-B7-2D-9F-75-06" string
[1] "&\0\01C-16-68-98-DF-6C-C9-16-54-5A-94-00-CA-57-77-CC" string
[2] "B6-24-7E-79-0C-66-14-5B-C0-32-F5-17-06-5D-13-87" string
[3] "1E-99-DE-1F-25-30-6E-DF-59-0D-05-2B-43-8F-07-16" string
[4] "76-82-30-13-C2-B4-33-7D-32-E2-04-C7-13-3C-F3-AB" string
[5] "23-BF-A2-F4-E4-77-78-6B-A5-2C-D2-6B-6F-B3-6F-44" string
Я получаю примерно 50% пакетовправильный.Я мог бы опубликовать код сокета и тому подобное, но, смею сказать, он довольно сложный.Тем не менее, если это необходимо, я выложу это.Есть ли какая-то вещь, связанная с сокетами, которую я пропускаю?Я надеюсь на быстрое исправление ... но я сомневаюсь, что у нас возникнут какие-либо проблемы, с которыми мы столкнулись.
Заранее благодарю за любые предложения.
Редактировать: Посмотрите репозиторий github здесь:https://github.com/Wotuu/RTS_XNA_v2/tree/master/SocketLibrary
По запросу некоторые снимки кода: создание MD5: https://github.com/Wotuu/RTS_XNA_v2/blob/master/PathfindingTest/PathfindingTest/UI/Menus/Multiplayer/TestConnectionMenu.cs: 222
String-> byte: https://github.com/Wotuu/RTS_XNA_v2/blob/master/SocketLibrary/Packets/Packet.cs: 113
byte-> String: https://github.com/Wotuu/RTS_XNA_v2/blob/master/SocketLibrary/Packets/PacketUtil.cs