Получение пакетов UDP от приложения Wireless IMU в Unity - PullRequest
0 голосов
/ 10 октября 2018

У меня есть проект, в котором у меня на телефоне Android есть приложение wireless IMU .Основываясь на описании приложения, оно отправляет данные ускорения / гироскопа в формате csv по UDP на целевой IP-адрес и порт.

В настоящее время я пытаюсь закодировать UDPListener в Unity, который получает эти данные.

using UnityEngine;
using UnityEngine.Networking;
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Collections.Generic;
using System.Linq;


public class UDPReceiver1 : MonoBehaviour
{
Thread udpListeningThread;
public int portNumberReceive;
UdpClient receivingUdpClient;
string[] delimiters = { ", ", "," };
string[] data;

void Start()
{
    initListenerThread();
}

void initListenerThread()
{
    Debug.Log("Started on : " + portNumberReceive.ToString());
    udpListeningThread = new Thread(new ThreadStart(UdpListener));

    // Run in background
    udpListeningThread.IsBackground = true;
    udpListeningThread.Start();
}

public void UdpListener()
{
    receivingUdpClient = new UdpClient(portNumberReceive);

    while (true)
    {
        //Listening 
        try
        {
            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

            // Blocks until a message returns on this socket from a remote host.
            byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);

            if (receiveBytes != null)
            {
                string returnData = Encoding.UTF8.GetString(receiveBytes);
                Debug.Log("Message Received" + returnData.ToString());
                Debug.Log("Address IP Sender" + RemoteIpEndPoint.Address.ToString());
                Debug.Log("Port Number Sender" + RemoteIpEndPoint.Port.ToString());

                data = returnData.Split(delimiters, StringSplitOptions.None);
                Debug.Log(data);
            }
        }
        catch (Exception e)
        {
            Debug.Log(e.ToString());
        }
    }
}

void OnDisable()
{
    if (udpListeningThread != null && udpListeningThread.IsAlive)
    {
        udpListeningThread.Abort();
    }

    receivingUdpClient.Close();
}
}

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

Когда я тестировал соединение, я подключал этот скрипт к игровому объекту, устанавливал произвольный номер порта, например, «12345», иИграть.Тем временем я запустил приложение на своем телефоне Android с целевым IP-адресом, являющимся IP-адресом компьютера, и целевым номером порта, являющимся тем же номером порта, который я использовал ранее.

Я был бы очень признателен, если бы какая-нибудь добрая душа моглапомогите, так как я застрял здесь на две недели; (

...