Зависание сервера Unity TCP - PullRequest
       0

Зависание сервера Unity TCP

0 голосов
/ 30 августа 2018

Я пытаюсь заставить tcp сервер работать в единстве, и это вроде как работает. Моя системная цель состоит в том, чтобы читать данные из другой программы, которая посылает мне байты и рисует мне картину этих данных. Основная проблема в том, что когда я запускаю его, он работает некоторое время (случайное время), а затем все единство замирает, и мне нужно убить его из диспетчера задач.

void Start()
{
    Display1 = gameObject.GetComponent<Renderer>();
    mymat = GetComponent<Renderer>().material;
    packetReady = false;
    tcpListenerThread = new Thread(new ThreadStart(ListenForIncommingRequests));
    tcpListenerThread.IsBackground = true;
    tcpListenerThread.Start();
    bytes = new byte[1024];
    tex = new Texture2D(800, 1280, TextureFormat.RGB24, false);
    firstTime = true;
    ArrayInit(3072060);
    packetLength = 3072060;
    myThread = new Thread(Draw);
    myThread.Start();
}

void Draw()
{
    if (Loader == null)
    {
        return;
    }

    else if (packetReady)
    {
        tex.LoadRawTextureData(Loader);
        tex.Apply();
        mymat.SetTexture("_EmissionMap", tex);
        Display1.material.mainTexture = tex;
        packetReady = false;
    }
}


void Update()
{
    Draw();
}


private void ListenForIncommingRequests()
{
   try
     {
         tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 35800);
         tcpListener.Start();

         while (true)
         {

            if (!tcpListener.Pending())
            {
                Thread.Sleep(100);
            }

            Thread.Sleep(10);

            using (connectedTcpClient = tcpListener.AcceptTcpClient())
            {

                using (NetworkStream stream = connectedTcpClient.GetStream())
                {
                    int length;
                    while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        if (bytes == null)
                        {
                            return;
                        }
                        else
                        {
                            ParseData(bytes);
                        }

                    }
                }
            }

         }

     }

     catch (SocketException socketException)
     {
         Debug.Log("SocketException " + socketException.ToString());
     }
     finally
     {
         tcpListener.Stop();
     }
}

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

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