Как проверить, заполнен ли буфер TCP - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть небольшая игра, где вы подключаетесь к самодельному выделенному серверу C # с TCP-сокетами.В обоих приложениях Unity Editor, Standalone Windows build и Unity Remote на моем телефоне моя игра работает хорошо, и мои пакеты полностью распознаются сервером и всеми клиентами.С моим Android-телефоном все складывается.

Я могу запустить игру, создать новую игровую комнату в лобби и запустить игровую комнату, когда я буду готов.Но в игре я не могу двигаться, как ожидалось.Сначала я думал, что это мой контроллер плеера, но это не так.Вот что происходит:

игра видит сенсорный ввод и отправляет его по сети;

сервер получает пакет, может прочитать его, понять его и передать свой ответ (если он действителен) любомуклиент подключен;

Случай 1: клиент не получит ничего (метод OnReceive даже не вызывается) по моему асинхронному соединению (99% того, что происходит)

Случай 2: клиентполучить пакет, понять его и применить соответствующее поведение в игре -> ход игрока (с пользовательским указанием пути A * на сетке).Этот случай встречается очень редко.

думаю, что приемный буфер заполнен.

Интересно, не сетевая ли система Android переходит в какой-то режим ожидания.Я видел, что это может произойти, но я не знаю, как решить эту проблему или связано ли это с моей проблемой.

Сегодня я не понимаю, почему, теоретически, такое поведение происходит и как это исправить,Если у кого-то есть какие-либо подсказки, я буду очень рад услышать это.

Спасибо, ребята

1 Ответ

0 голосов
/ 03 февраля 2019

Перед отправкой попробуйте проверить, может ли сокет записать, ака буфер не заполнен

https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.poll?view=netframework-4.7.2

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