Странные символы в строке с сокетами c # - PullRequest
4 голосов
/ 05 декабря 2011

Мы работаем над 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

1 Ответ

2 голосов
/ 06 декабря 2011

Помните, что TCP - это потоковый протокол.Нет гарантии, что получающий сокет получит пакет определенного размера.Получатель отвечает за повторную сборку пакетов произвольного размера, которые он получает, в связное сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...