У меня есть C# AsyncServer - он отсылает пакеты клиенту Unity. Асинхронный Socket на Unity (статический singleton) работает (на не удаляемом объекте) на сцене (расширяет MonoBehaviour). Всё хорошо, но иногда Unity почему-то прекращает принимать пакеты, хотя они точно отправлены с сервера. Иногда принимает, иногда нет - если периодически отправлять один и тот же пакет - Unity всё таки его примет... В общем, живёт какой-то своей жизнью...
Антивирус отключал, добавлял в исключение и сервер и клиент, время задержки отправки пакетов с сервера менял (от 0 до 300 ms), порт разрешён, ставил вызов метода Recieve в Update, делал класс отдельным (не MonoBehaviour), и так далее - ничего не помогает... Unity даже не сообщает ни о каких ошибках - просто тишина... Даже не знаю куда копать...
------------------------------------------------------------------
--- Простите, почему-то не смог вставить картинку на форум. ---
--- Если что, вот ссылка на стороннем сервисе. ---
https://cdn1.savepice.ru/uploads/2020/2/1/69297b9ca8de9750e75d49cca5cfaab5-full.png
------------------------------------------------------------------
Метод Socket Receiving:
Синтаксис:
Используется csharp
private Socket _clientSocket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);
private byte[] _recieveBuffer = new byte[32768];
private void ReceiveCallback(IAsyncResult ar) {
int recieved = _clientSocket.EndReceive(ar);
byte[] recData = new byte[recieved];
Buffer.BlockCopy(
_recieveBuffer,
0,
recData,
0,
recieved
);
Receive();
}
private void Receive() {
_clientSocket.BeginReceive(
_recieveBuffer,
0,
_recieveBuffer.Length,
SocketFlags.None,
new AsyncCallback(ReceiveCallback),
_clientSocket
);
}
Вот такая непонятная и раздражающая ситуация. Может кто знает, что происходит? Может мне нужно использовать Socket.ReceiveAsync(SocketAsyncEventArgs) или другой какой метод? Что вообще может происходить внутри Unity в данной ситуации - почему она по своему хотению то принимает пакеты, то нет?
Спасибо!