Unity C # tcpclient stream.Read StartCoroutine Проблема - PullRequest
0 голосов
/ 12 января 2019

Я разрабатываю TcpClient с Unity3D.

Есть проблема.

                    if (length == Marshal.SizeOf(typeof(BATTLE_CHARACTER_DATA_GROUP_SEND))+1)
                    {

                            BATTLE_CHARACTER_DATA_GROUP_SEND bcdgs = new BATTLE_CHARACTER_DATA_GROUP_SEND();
                            bcdgs.Deserialize(ref bytes);
                            Debug.Log("bcdgs data Size : " + bcdgs.data_size);
                            StartCoroutine(PlayerObjectCreate(bcdgs));
                    }

Если вы попытаетесь создать объект mainThread в приведенном выше коде, но запустите StartCoroutine, он отправит значение разъединения клиента «0» на сторону сервера.

Что не так с моим кодом?

Ниже приведены полные источники.

пожалуйста.

        private void ConnectToTcpServer()
{
    try
    {
        clientReceiveThread = new Thread(new ThreadStart(ListenForData));
        clientReceiveThread.IsBackground = true;
        clientReceiveThread.Start();

    }
    catch (Exception e)
    {
        Debug.Log("On Client Connect Exception " + e);
    }
}
private void ListenForData()
{
    try
    {
        socketConnection = new TcpClient("192.168.235.128", 53390);
        if (socketConnection.Connected)
        {
            ServerConnected = true;
            Debug.Log("Connected!!!");
        }
        else
        {
            ServerConnected = false;
            Debug.Log("Not Connected!!!");
        }

        while (true)
        {

            using (NetworkStream stream = socketConnection.GetStream())
            {
                int length;
                byte[] bytes = new byte[Marshal.SizeOf(typeof(BATTLE_CHARACTER_DATA_GROUP_SEND))+1];
                while ((length = stream.Read(bytes, 0, bytes.Length)) != 0)
                {                        
                    Debug.Log("length : " + length);
                    if (length == Marshal.SizeOf(typeof(BATTLE_CHARACTER_DATA_GROUP_SEND))+1)
                    {

                            BATTLE_CHARACTER_DATA_GROUP_SEND bcdgs = new BATTLE_CHARACTER_DATA_GROUP_SEND();
                            bcdgs.Deserialize(ref bytes);
                            Debug.Log("bcdgs data Size : " + bcdgs.data_size);

StartCoroutine(PlayerObjectCreate(bcdgs));
                    }
                }
            }
        }
    }
    catch (SocketException socketException)
    {
        Debug.Log("Socket Exception : " + socketException.ToString());            
    }
}
...